5 分钟掌握智联招聘网站爬取并保存到 MongoDB 数据库

2017 年 7 月 28 日 互联网架构师

来源: lemon (微信公号: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”的内容如下:


# 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”的内容如下:


# 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))


看完本文有收获?请转发分享给更多人


欢迎关注“互联网架构师”,我们分享最有价值的互联网技术干货文章,助力您成为有思想的全栈架构师,我们只聊互联网、只聊架构,不聊其他!打造最有价值的架构师圈子和社区。

本公众号覆盖中国主要首席架构师、高级架构师、CTO、技术总监、技术负责人等人 群。分享最有价值的架构思想和内容。打造中国互联网圈最有价值的架构师圈子。

  • 长按下方的二维码可以快速关注我们

  • 如想加群讨论学习,请点击右下角的“加群学习”菜单入群



登录查看更多
0

相关内容

智联在手,工作我有!招聘求职找工作神器! 史上更难就业季,智联招聘依然给力! 海量更新更真实的工作机会随时投递,理想职位分分钟到碗里!
【2020新书】实战R语言4,323页pdf
专知会员服务
100+阅读 · 2020年7月1日
【实用书】Python机器学习Scikit-Learn应用指南,247页pdf
专知会员服务
264+阅读 · 2020年6月10日
干净的数据:数据清洗入门与实践,204页pdf
专知会员服务
161+阅读 · 2020年5月14日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
117+阅读 · 2020年5月10日
【阿里技术干货】知识结构化在阿里小蜜中的应用
专知会员服务
96+阅读 · 2019年12月14日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
95+阅读 · 2019年12月4日
MIT新书《强化学习与最优控制》
专知会员服务
275+阅读 · 2019年10月9日
吐血整理!140种Python标准库、第三方库和外部工具都有了
炼数成金订阅号
14+阅读 · 2019年7月30日
一文看懂怎么用 Python 做数据分析
大数据技术
24+阅读 · 2019年5月5日
成人网站PornHub爬虫分享(一天可爬取500万以上的视频)
互联网架构师
16+阅读 · 2018年5月23日
Python 爬虫实践:《战狼2》豆瓣影评分析
数据库开发
5+阅读 · 2018年3月19日
教你用Python爬虫股票评论,简单分析股民用户情绪
数据派THU
10+阅读 · 2017年12月12日
【python 自然语言处理】对胡歌【猎场】电视剧评论进行情感值分析
Python3爬虫之入门和正则表达式
全球人工智能
7+阅读 · 2017年10月9日
Arxiv
3+阅读 · 2019年3月1日
Arxiv
12+阅读 · 2019年1月24日
Attend More Times for Image Captioning
Arxiv
6+阅读 · 2018年12月8日
Rapid Customization for Event Extraction
Arxiv
7+阅读 · 2018年9月20日
Arxiv
3+阅读 · 2018年4月5日
Arxiv
5+阅读 · 2015年9月14日
Arxiv
3+阅读 · 2012年11月20日
VIP会员
相关VIP内容
【2020新书】实战R语言4,323页pdf
专知会员服务
100+阅读 · 2020年7月1日
【实用书】Python机器学习Scikit-Learn应用指南,247页pdf
专知会员服务
264+阅读 · 2020年6月10日
干净的数据:数据清洗入门与实践,204页pdf
专知会员服务
161+阅读 · 2020年5月14日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
117+阅读 · 2020年5月10日
【阿里技术干货】知识结构化在阿里小蜜中的应用
专知会员服务
96+阅读 · 2019年12月14日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
95+阅读 · 2019年12月4日
MIT新书《强化学习与最优控制》
专知会员服务
275+阅读 · 2019年10月9日
相关资讯
吐血整理!140种Python标准库、第三方库和外部工具都有了
炼数成金订阅号
14+阅读 · 2019年7月30日
一文看懂怎么用 Python 做数据分析
大数据技术
24+阅读 · 2019年5月5日
成人网站PornHub爬虫分享(一天可爬取500万以上的视频)
互联网架构师
16+阅读 · 2018年5月23日
Python 爬虫实践:《战狼2》豆瓣影评分析
数据库开发
5+阅读 · 2018年3月19日
教你用Python爬虫股票评论,简单分析股民用户情绪
数据派THU
10+阅读 · 2017年12月12日
【python 自然语言处理】对胡歌【猎场】电视剧评论进行情感值分析
Python3爬虫之入门和正则表达式
全球人工智能
7+阅读 · 2017年10月9日
相关论文
Arxiv
3+阅读 · 2019年3月1日
Arxiv
12+阅读 · 2019年1月24日
Attend More Times for Image Captioning
Arxiv
6+阅读 · 2018年12月8日
Rapid Customization for Event Extraction
Arxiv
7+阅读 · 2018年9月20日
Arxiv
3+阅读 · 2018年4月5日
Arxiv
5+阅读 · 2015年9月14日
Arxiv
3+阅读 · 2012年11月20日
Top
微信扫码咨询专知VIP会员