5分钟掌握智联招聘网站爬取并保存到MongoDB数据库
前言
本次主题分两篇文章来介绍:
- 一、数据采集
- 二、数据分析
第一篇先来介绍数据采集,即用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))
更多精彩内容请关注微信公众号:
“Python数据之道”
相关推荐
-
Python爬虫-登录新浪微博并获取关注列表 网络爬虫
2019-8-25
-
使用FilesPipeline和ImagesPipeline 网络爬虫
2019-8-26
-
Python抓取框架:Scrapy的架构 网络爬虫
2018-2-3
-
网络爬虫:使用Scrapy框架编写一个抓取书籍信息的爬虫服务 网络爬虫
2018-2-25
-
Python爬虫(8):分析Ajax请求爬取果壳网 网络爬虫
2018-3-13
-
网络爬虫之使用pyppeteer替代selenium完美绕过webdriver检测 网络爬虫
2019-8-18
-
Xpider框架开发文档 网络爬虫
2019-9-13
-
下载 tumblr 标记为喜欢的内容 网络爬虫
2019-8-26
-
MongoDB 4.0 Python3.7 稳定高效的评分制IP代理池APIserver 网络爬虫
2018-12-5
-
Python爬虫,抓取淘宝商品评论内容 网络爬虫
2019-8-25