本篇内容主要记录博主本人爬取智联招聘网站信息的过程!!

环境: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的智联招聘网站信息爬取相关推荐

  1. 智联招聘职位信息爬取并写入xls表中

    环境:python2.7 1.cmd命令行下载第三方资源包:pip install xlwt(用于往表格中写入数据) 主要代码 #coding: utf-8 import requests impor ...

  2. python爬取智联招聘网_python爬取智联招聘工作岗位信息

    1 # coding:utf-8 2 # auth:xiaomozi 3 #date:2018.4.19 4 #爬取智联招聘职位信息 5 6 7 import urllib 8 from lxml i ...

  3. Android 智联招聘网站信息获取

    使用的是Jsoup框架,主要使用的是select函数完成的. #id elements with attribute ID of "id" div#wrap, #logo .cla ...

  4. java爬取智联招聘职位信息

    第一次写爬虫,案例比较简单,就在智联招聘网站上爬取职位信息. 技术点:IO流,集合,Jsoup使用,以及前端的知识 代码如下: package com.wty.utils;import java.io ...

  5. Scrapy学习——爬取智联招聘网站案例

    Scrapy学习--爬取智联招聘网站案例 安装scrapy 下载 安装 准备 分析 代码 结果 安装scrapy 如果直接使用pip安装会在安装Twisted报错,所以我们需要手动安装. 下载 安装s ...

  6. 爬取智联招聘网站的手段(scrapy)

    首先www.zhaopin.com是智联招聘网站的首页,进行搜索后,比如搜Java,点右键查看网页源代码可以看到,网页里面搜到的内容是异步加载的如图所示: 然后点击f12打开开发者工具,如图: 再点击 ...

  7. 克服反爬虫机制爬取智联招聘网站

    一.实验内容 1.爬取网站: 智联招聘网站(https://www.zhaopin.com/) 2.网站的反爬虫机制:     在我频繁爬取智联招聘网站之后,它会出现以下文字(尽管我已经控制了爬虫的爬 ...

  8. python 爬虫学习:抓取智联招聘网站职位信息(二)

    在第一篇文章(python 爬虫学习:抓取智联招聘网站职位信息(一))中,我们介绍了爬取智联招聘网站上基于岗位关键字,及地区进行搜索的岗位信息,并对爬取到的岗位工资数据进行统计并生成直方图展示:同时进 ...

  9. python 爬虫学习:抓取智联招聘网站职位信息(一)

    近期智联招聘的网站风格变化较快,这对于想爬取数据的人来说有些难受.因此,在前人基础上,我整理了针对智联招聘网站的最新结构进行数据抓取的代码,目前支持抓取职位搜索列表页面的列表项,并将职位列表以exlc ...

最新文章

  1. 深入Linux内核网络堆栈
  2. excel处置4000行数据卡_【Excel技巧】在Excel中奇偶行提取和奇偶行筛选方法
  3. LeetCode Algorithm 268. 丢失的数字
  4. 2018-03-28 从人机交互角度看中文编程:#39;打开微信#39;
  5. json 潜逃 结构体_JSON还原为结构体
  6. 序列化模块和hashlib模块
  7. 菜鸟学习笔记:Java基础篇5(抽象类与接口、回调函数、内部类)
  8. 一般别人去湖大找门,我都笑得半死
  9. 亚马逊与 Uber,软件开发的方式有何不同?
  10. Agglomerated SSL 1.2.0 发布
  11. 亚马逊ec2服务器上无法使用sudo执行npm命令的解决办法
  12. C#:数据库操作(待补充)
  13. 【代码笔记】iOS-账号,密码记住
  14. 预定系统 mysql_Jsp+Ssm+Mysql实现的酒店预定管理系统毕设指导思路模板
  15. ONMF正交非负矩阵分解·论文总结
  16. 安卓逆向和手游辅助学习路线
  17. 证券期货行业数据模型设计
  18. 《人生若只如初见——古典诗词的美丽与哀愁》--安意如
  19. 《计算机网络教程》(微课版 第五版)第七章 网络安全 课后习题及答案
  20. 蛮力法 第5关:白帽子红帽子问题

热门文章

  1. 中日德三系PLC编程软件对比,各位工控人用的哪款?
  2. Tensorflow与Flask结合打造手写体数字识别项目(MNIST数据集)
  3. 手机端APP促销优惠券优惠活动页面设计模板
  4. 新科高清GPS地图4.04版测评
  5. 宝藏又小众的鸟壁纸素材网站分享
  6. Vue基础技术|背景图铺满全屏效果
  7. Android R 颜色管理-开端
  8. 杀毒!- 难道非要用软件?(人毒大战终极指南)
  9. 清华大学计算机系哪个专业就业前景最好,清华大学有3个专业,是世界第一,实力和就业前景都很棒...
  10. 国外LEAD联盟win系统去哪里下载