5 分钟掌握用Python语言在智联招聘网站爬取并保存到 MongoDB 数据库
小标 2018-07-17 来源 : 阅读 1012 评论 0

摘要:本文主要向大家介绍了用Python语言在智联招聘网站爬取并保存到 MongoDB 数据库,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助。

本文主要向大家介绍了用Python语言在智联招聘网站爬取并保存到 MongoDB 数据库,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助。

本次主题分两篇文章来介绍:

· 一、数据采集

· 二、数据分析

第一篇先来介绍数据采集,即用python爬取网站数据。

1 运行环境和python库

先说下运行环境:

· python3.5

· windows 7, 64位系统

python库

本次智联招聘的网站爬取,主要涉及以下一些python库:

· requests

· BeautifulSoup

· multiprocessing

· pymongo

· itertools

2 爬取的主要步骤

· 根据关键字、城市、以及页面编号生成需要爬取的网页链接

· 用requests获取相应的网页内容

· 用BeautifulSoup解析,获取需要的关键信息

· 将爬取的信息存入MongoDB数据库中,插入新记录或更新已有记录

· 用multiprocessing启动多进程进行爬取,提高运行效率

3 文件组成

· 信息配置文件“zhilian_kw_config.py”

· 爬虫主运行文件“zhilian_kw_spider.py”

在配置文件中设置需要爬取的信息,然后运行主程序进行内容抓取。

配置文件“zhilian_kw_config.py”的内容如下:

Python

# Code based on Python 3.x

# _*_ coding: utf-8 _*_

# __Author: "LEMON"

 

TOTAL_PAGE_NUMBER = 90  # PAGE_NUMBER: total number of pages,可进行修改

 

KEYWORDS = ['大数据', 'python', '投资经理'] # 需爬取的关键字可以自己添加或修改

 

# 爬取主要城市的记录

ADDRESS = ['全国', '北京', '上海', '广州', '深圳',

           '天津', '武汉', '西安', '成都', '大连',

           '长春', '沈阳', '南京', '济南', '青岛',

           '杭州', '苏州', '无锡', '宁波', '重庆',

           '郑州', '长沙', '福州', '厦门', '哈尔滨',

           '石家庄', '合肥', '惠州', '太原', '昆明',

           '烟台', '佛山', '南昌', '贵阳', '南宁']

 

MONGO_URI = 'localhost'

MONGO_DB = 'zhilian'

   

爬虫主运行文件“zhilian_kw_spider.py”的内容如下:

Python

# Code based on Python 3.x

# _*_ coding: utf-8 _*_

# __Author: "LEMON"

 

from datetime import datetime

from urllib.parse import urlencode

from multiprocessing import Pool

import requests

from bs4 import BeautifulSoup

import pymongo

from zhilian.zhilian_kw_config import *

import time

from itertools import product

 

client = pymongo.MongoClient(MONGO_URI)

db = client[MONGO_DB]

 

def download(url):

    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0'}

    response = requests.get(url, headers=headers)

    return response.text

 

def get_content(html):

    # 记录保存日期

    date = datetime.now().date()

    date = datetime.strftime(date, '%Y-%m-%d')  # 转变成str

 

    soup = BeautifulSoup(html, 'lxml')

    body = soup.body

    data_main = body.find('div', {'class': 'newlist_list_content'})

 

    if data_main:

        tables = data_main.find_all('table')

 

        for i, table_info in enumerate(tables):

            if i == 0:

                continue

            tds = table_info.find('tr').find_all('td')

            zwmc = tds[0].find('a').get_text()  # 职位名称

            zw_link = tds[0].find('a').get('href')  # 职位链接

            fkl = tds[1].find('span').get_text()  # 反馈率

            gsmc = tds[2].find('a').get_text()  # 公司名称

            zwyx = tds[3].get_text()  # 职位月薪

            gzdd = tds[4].get_text()  # 工作地点

            gbsj = tds[5].find('span').get_text()  # 发布日期

 

            tr_brief = table_info.find('tr', {'class': 'newlist_tr_detail'})

            # 招聘简介

            brief = tr_brief.find('li', {'class': 'newlist_deatil_last'}).get_text()

 

            # 用生成器获取信息

            yield {'zwmc': zwmc,  # 职位名称

                   'fkl': fkl,  # 反馈率

                   'gsmc': gsmc,  # 公司名称

                   'zwyx': zwyx,  # 职位月薪

                   'gzdd': gzdd,  # 工作地点

                   'gbsj': gbsj,  # 公布时间

                   'brief': brief,  # 招聘简介

                   'zw_link': zw_link,  # 网页链接

                   'save_date': date  # 记录信息保存的日期

                   }

 

def main(args):

    basic_url = '招聘(求职)尽在智联招聘?'

 

    for keyword in KEYWORDS:

        mongo_table = db[keyword]

        paras = {'jl': args[0],

                 'kw': keyword,

                 'p': args[1]  # 第X页

                 }

        url = basic_url + urlencode(paras)

        # print(url)

        html = download(url)

        # print(html)

        if html:

            data = get_content(html)

            for item in data:

                if mongo_table.update({'zw_link': item['zw_link']}, {'$set': item}, True):

                    print('已保存记录:', item)

 

if __name__ == '__main__':

    start = time.time()

    number_list = list(range(TOTAL_PAGE_NUMBER))

    args = product(ADDRESS, number_list)

    pool = Pool()

    pool.map(main, args) # 多进程运行

    end = time.time()

    print('Finished, task runs %s seconds.' % (end - start))

以上就介绍了Python的相关知识,希望对Python有兴趣的朋友有所帮助。了解更多内容,请关注职坐标编程语言Python频道!


本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程