基于scrapy+mongodb的智联招聘网站信息爬取
本篇内容主要记录博主本人爬取智联招聘网站信息的过程!!
环境:python 3.6.5
pycharm JetBrains PyCharm Community Edition 2018.1 x64
Mongodb 4.0.0
1.第一步当然是创建一个新的爬虫啦
scrapy crawl xxxx #爬虫名字
2.解析网站
进入到智联首页https://www.zhaopin.com/,点击搜索(以搜索python为例),得到信息列表按F12打开调试器
一开始我单纯的以为在Elements(查看器)获取所有信息足矣
让我满怀欢喜的把整个网页爬取下来,然后分析,发现要搜索上图标签//*[@id="listContent"]/div[1]/div[1]/div[1]/div[1]/a/span竟然啥没有,不信你打开网页源代码试试。
这是因为,生成的信息是通过异步加载出来的,所以要分析的话要通过Network来获取异步加载信息
点击上面的第二条链接,你会发现,所有信息都被藏在里面了
有了这些json格式的信息,就可以用xpath或者re来构造需要的信息。
还有一点就是实现翻页,拉到最底部点击第二页和第三页。会发现调试器又出现了四条链接与刚才的一样,对比下两条sou开头的链接
1.https://fe-api.zhaopin.com/c/i/sou?pageSize=60&cityId=763&workExperience=-1&education=-1&companyType=-1&employmentType=-1&jobWelfareTag=-1&kw=python&kt=3&lastUrlQuery=%7B%22jl%22:%22763%22,%22kw%22:%22python%22,%22kt%22:%223%22%7D
2.https://fe-api.zhaopin.com/c/i/sou?start=60&pageSize=60&cityId=763&workExperience=-1&education=-1&companyType=-1&employmentType=-1&jobWelfareTag=-1&kw=python&kt=3&lastUrlQuery=%7B%22p%22:2,%22jl%22:%22763%22,%22kw%22:%22python%22,%22kt%22:%223%22%7D
3.https://fe-api.zhaopin.com/c/i/sou?start=120&pageSize=60&cityId=763&workExperience=-1&education=-1&companyType=-1&employmentType=-1&jobWelfareTag=-1&kw=python&kt=3&lastUrlQuery=%7B%22p%22:3,%22jl%22:%22763%22,%22kw%22:%22python%22,%22kt%22:%223%22%7D
会发现多了一个start=xxx,不难发现这就是页码跳转的一个参数。有了这个参数我们就可以实现翻页获取信息。接下来开始敲代码!
3.设置settings文件
激活DEFAULT_REQUEST_HEADERS头部信息,打开PIPELINES管道。
ROBOTSTXT_OBEY = False DEFAULT_REQUEST_HEADERS = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8','Accept-Language': 'en','User-Agent': "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)"" Chrome/63.0.3239.132 Safari/537.36" } ITEM_PIPELINES = {'zhilian.pipelines.ZhilianPipeline': 300, }
4.设置items
暂时先抓取这些简单信息
class ZhilianItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() eduLevel = scrapy.Field() # 学历 company = scrapy.Field() # 公司名称 salary = scrapy.Field() # 薪资 city = scrapy.Field() # 城市 workingExp = scrapy.Field() # 工作经验
5.编写爬虫文件
zl_spider.py
# -*- coding: utf-8 -*- import jsonimport scrapyfrom scrapy import Requestfrom zhilian.items import ZhilianItemclass ZlSpiderSpider(scrapy.Spider):name = 'zl_spider'allowed_domains = ['www.zhaopin.com']start_urls = ['https://www.zhaopin.com']first_url = 'https://fe-api.zhaopin.com/c/i/sou?start={page}&pageSize=60&cityId=763&workExperience=-1&education' \'=-1&companyType=-1&employmentType=-1&jobWelfareTag=-1&kw=python&kt=3&lastUrlQuery=%7B%22p%22:2,' \'%22jl%22:%22763%22,%22kw%22:%22python%22,%22kt%22:%223%22%7D'def start_requests(self, page=None): #实现翻页for i in range(0, 11):page = i*60 yield Request(self.first_url.format(page=page), callback=self.parse)passdef parse(self, response):result = json.loads(response.text)item = ZhilianItem()for field in item.fields:if field in result.keys():item[field] = result.get(field)yield item
至此运行查看一下有没有成功
发现空空如也
检查一下result.keys()里的值
发现字典里只有两个key,所以上面遍历出来的value为空,而我真正需要的值在data.results里面
接下来改写下代码,把parse部分改写成如下图
结果无情报错
无奈之下只好手打
最终修改得到的爬虫代码页为
# -*- coding: utf-8 -*- import jsonimport scrapy from scrapy import Request from zhilian.items import ZhilianItemclass ZlSpiderSpider(scrapy.Spider):name = 'zl_spider'allowed_domains = ['www.zhaopin.com']start_urls = ['https://www.zhaopin.com']first_url = 'https://fe-api.zhaopin.com/c/i/sou?start={page}&pageSize=60&cityId=763&workExperience=-1&education' \'=-1&companyType=-1&employmentType=-1&jobWelfareTag=-1&kw=python&kt=3&lastUrlQuery=%7B%22p%22:2,' \'%22jl%22:%22763%22,%22kw%22:%22python%22,%22kt%22:%223%22%7D'def start_requests(self, page=None): # 翻页for i in range(0, 11):page = i*60yield Request(self.first_url.format(page=page), callback=self.parse)passdef parse(self, response):item = ZhilianItem()result = json.loads(response.text)for i in range(0, 60): # 一个页面有60个数据字典,遍历每个字典results = result['data']['results'][i]company = results['company']['name']eduLevel = results['eduLevel']['name']workingExp = results['workingExp']['name']city = results['city']['display']item['company'] = companyitem['eduLevel'] = eduLevelitem['salary'] = results.get('salary')item['workingExp'] = workingExpitem['city'] = cityyield item
运行结果部分如图
6.写入数据库mongodb,用update来使数据去重(适用于数据量小)
# -*- coding: utf-8 -*-# Define your item pipelines here # # Don't forget to add your pipeline to the ITEM_PIPELINES setting # See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html import pymongoclass ZhilianPipeline(object):def process_item(self, item, spider):return itemclass MongoPipeline(object):collection_name = 'zl_python'def __init__(self, mongo_uri, mongo_db):self.mongo_uri = mongo_uriself.mongo_db = mongo_db@classmethoddef from_crawler(cls, crawler):return cls(mongo_uri=crawler.settings.get('MONGO_URI'),mongo_db=crawler.settings.get('MONGO_DATABASE'))def open_spider(self, spider):self.client = pymongo.MongoClient(self.mongo_uri)self.db = self.client[self.mongo_db]def close_spider(self, spider):self.client.close()def process_item(self, item, spider):self.db[self.collection_name].update({'company': item['company']}, dict(item), True) # 去重return item
7.最终成果部分截图
十页的数据为313,说明部分数据为重复数据。
github地址:https://github.com/biyeee/ZL_spider
转载于:https://www.cnblogs.com/biyeee/p/9346220.html
基于scrapy+mongodb的智联招聘网站信息爬取相关推荐
- 智联招聘职位信息爬取并写入xls表中
环境:python2.7 1.cmd命令行下载第三方资源包:pip install xlwt(用于往表格中写入数据) 主要代码 #coding: utf-8 import requests impor ...
- python爬取智联招聘网_python爬取智联招聘工作岗位信息
1 # coding:utf-8 2 # auth:xiaomozi 3 #date:2018.4.19 4 #爬取智联招聘职位信息 5 6 7 import urllib 8 from lxml i ...
- Android 智联招聘网站信息获取
使用的是Jsoup框架,主要使用的是select函数完成的. #id elements with attribute ID of "id" div#wrap, #logo .cla ...
- java爬取智联招聘职位信息
第一次写爬虫,案例比较简单,就在智联招聘网站上爬取职位信息. 技术点:IO流,集合,Jsoup使用,以及前端的知识 代码如下: package com.wty.utils;import java.io ...
- Scrapy学习——爬取智联招聘网站案例
Scrapy学习--爬取智联招聘网站案例 安装scrapy 下载 安装 准备 分析 代码 结果 安装scrapy 如果直接使用pip安装会在安装Twisted报错,所以我们需要手动安装. 下载 安装s ...
- 爬取智联招聘网站的手段(scrapy)
首先www.zhaopin.com是智联招聘网站的首页,进行搜索后,比如搜Java,点右键查看网页源代码可以看到,网页里面搜到的内容是异步加载的如图所示: 然后点击f12打开开发者工具,如图: 再点击 ...
- 克服反爬虫机制爬取智联招聘网站
一.实验内容 1.爬取网站: 智联招聘网站(https://www.zhaopin.com/) 2.网站的反爬虫机制: 在我频繁爬取智联招聘网站之后,它会出现以下文字(尽管我已经控制了爬虫的爬 ...
- python 爬虫学习:抓取智联招聘网站职位信息(二)
在第一篇文章(python 爬虫学习:抓取智联招聘网站职位信息(一))中,我们介绍了爬取智联招聘网站上基于岗位关键字,及地区进行搜索的岗位信息,并对爬取到的岗位工资数据进行统计并生成直方图展示:同时进 ...
- python 爬虫学习:抓取智联招聘网站职位信息(一)
近期智联招聘的网站风格变化较快,这对于想爬取数据的人来说有些难受.因此,在前人基础上,我整理了针对智联招聘网站的最新结构进行数据抓取的代码,目前支持抓取职位搜索列表页面的列表项,并将职位列表以exlc ...
最新文章
- 深入Linux内核网络堆栈
- excel处置4000行数据卡_【Excel技巧】在Excel中奇偶行提取和奇偶行筛选方法
- LeetCode Algorithm 268. 丢失的数字
- 2018-03-28 从人机交互角度看中文编程:#39;打开微信#39;
- json 潜逃 结构体_JSON还原为结构体
- 序列化模块和hashlib模块
- 菜鸟学习笔记:Java基础篇5(抽象类与接口、回调函数、内部类)
- 一般别人去湖大找门,我都笑得半死
- 亚马逊与 Uber,软件开发的方式有何不同?
- Agglomerated SSL 1.2.0 发布
- 亚马逊ec2服务器上无法使用sudo执行npm命令的解决办法
- C#:数据库操作(待补充)
- 【代码笔记】iOS-账号,密码记住
- 预定系统 mysql_Jsp+Ssm+Mysql实现的酒店预定管理系统毕设指导思路模板
- ONMF正交非负矩阵分解·论文总结
- 安卓逆向和手游辅助学习路线
- 证券期货行业数据模型设计
- 《人生若只如初见——古典诗词的美丽与哀愁》--安意如
- 《计算机网络教程》(微课版 第五版)第七章 网络安全 课后习题及答案
- 蛮力法 第5关:白帽子红帽子问题