使用Scrapy框架爬取拉勾网招聘信息

最近接触了Scrapy爬虫框架,简单写了个爬虫爬取拉钩网的招聘信息,加深对Scrapy框架的理解,不得不说Scrapy框架其实还是蛮方便的,就像爬虫流水线一样,如果是大项目的话使用Scrapy会变得更加容易管理,废话不多说,下面就看看如何使用Scrapy爬取拉勾网招聘消息吧。

我们发现由于数据是分页显示的,如果想要获取每一页的内容,自然需要获取每一页的链接。

我们点击下一页,发现页面回到了顶端,并且url栏没有任何变化!为什么呢?当前页的参数去哪里了?我们需要这里又用到了chrone浏览器强大的开发者工具了。在点击“3”之后,出现了下面的请求。

可以看到,传到后台的页码参数正安静地躺在那里呢,也就是图中的pn,而kd就是我们传入的关键字keyword。在这里我们也可以得到请求的url。但是,如何爬取ajax请求返回的数据呢?在scrapy中,我们可以通过start_requests这个函数返回一个请求列表,框架会按照这个请求列表去请求,然后将得到的response交给我们写好的回调函数,json数据就包含在response中。代码如下:

def start_requests(self):#修改city参数更换城市url= "https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false&isSchoolJob=0&city=广州"requests = []
#range是查询的页码范围for i in range(1, 60):#修改kd参数更换关键字formdata = {'first':'false', 'pn':str(i),'kd':'java'}request = FormRequest(url, callback=self.parse_model,formdata=formdata)requests.append(request)print(request)return requests

这里我们同样需要构造我们的请求头,scrapy框架会自动去读取的。

custom_settings = {"DEFAULT_REQUEST_HEADERS": {'Accept': 'application/json, text/javascript, */*; q=0.01','Accept-Encoding': 'gzip, deflate, br','Accept-Language': 'zh-CN,zh;q=0.8','Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',            'Host': 'www.lagou.com','Origin': 'https://www.lagou.com','Referer': 'https://www.lagou.com/jobs/list_java?','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36','X-Anit-Forge-Code': '0','X-Anit-Forge-Token': 'None','X-Requested-With': 'XMLHttpRequest'},"ITEM_PIPELINES": {'lagou.pipelines.LagouPipeline': 300}}

分析传回来的json数据的结构,可以得到我们的处理函数如下:

def parse_model(self, response):print(response.body.decode())jsonBody =json.loads(response.body.decode())results = jsonBody['content']['positionResult']['result']items=[]for result in results:item=LagouItem()item['name']=result['positionName']item['workLocation']=result['city']if result['district']:item['workLocation']+=result['district']if result['businessZones']:for zone in result['businessZones']:item['workLocation'] +=zone#item['catalog']item['money']=result['salary']item['demand']=result['workYear']+"/"+result['education']item['skillLabel']=",".join(result['positionLables'])item['positionAdvantage']=result['positionAdvantage']item['publishTime']=result['formatCreateTime']item['company']=result['companyFullName']item['companyField']=result['industryField']item['companyLabelList']=",".join(result['companyLabelList'])item['detailLink']="https://www.lagou.com/jobs/"+str(result['positionId'])+".html"item['detailCompany']="https://www.lagou.com/gongsi/"+str(+result['companyId'])+".html"items.append(item)return items

Item具体如下:

class LagouItem(Item):name = Field()                # 职位名称workLocation = Field()        # 工作地点catalog = Field()             # 职位类别money= Field()                # 薪资水平demand=Field()                # 要求skillLabel=Field()            # 技能标签publishTime = Field()         # 发布时间company = Field()             # 公司名称companyField=Field()          # 公司服务领域companyLabelList=Field()      # 公司简介positionAdvantage=Field()     # 职位福利detailLink = Field()          # 职位详情页链接detailCompany=Field()         # 公司详情页链接

数据提取完之后,由Pine来处理并进行后续操作,如储存在excel/数据库中。这里我将爬到的数据存到xlsx中。代码如下:

class LagouPipeline(object):def __init__(self):self.workbook = Workbook()self.ws = self.workbook.activeself.ws.append(['职位名称', '工作地点', '薪资水平', '要求', '技能标签', '发布时间','公司名称','公司服务领域','公司简介','职位福利','职位详情页链接','公司详情页链接'])  # 设置表头#self.file = codecs.open('tencent.json','w', encoding='utf-8')def process_item(self, item, spider):line = [item['name'], item['workLocation'],item['money'], item['demand'], item['skillLabel'],item['publishTime'],item['company'],item['companyField'],item['companyLabelList'],item['positionAdvantage'],item['detailLink'],item['detailCompany']]  # 把数据中每一项整理出来self.ws.append(line)self.workbook.save('lagou.xlsx')  # 保存xlsx文件#line = json.dumps(dict(item), ensure_ascii=False)+ "\n"#self.file.write(line)return itemdef spider_closed(self, spider):self.file.close()

最后为了防止拉勾网的反爬虫机制,在setting里设置拒绝遵守robot协议,并且设置爬取时延,防止被认为是爬虫。

ROBOTSTXT_OBEY = False
DOWNLOAD_DELAY = 10

最终效果如下:

【python爬虫02】使用Scrapy框架爬取拉勾网招聘信息相关推荐

  1. Python爬虫实战之一 - 基于Requests爬取拉勾网招聘信息,并保存至本地csv文件

    Python爬虫实战之二 - 基于Requests抓取拉勾网招聘信息 ---------------readme--------------- 简介:本人产品汪一枚,Python自学数月,对于小白,本 ...

  2. python爬虫教程:Scrapy框架爬取Boss直聘网Python职位信息的源码

    今天小编就为大家分享一篇关于Scrapy框架爬取Boss直聘网Python职位信息的源码,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧 分析 使用Crawl ...

  3. python爬虫(16)使用scrapy框架爬取顶点小说网

    本文以scrapy 框架来爬取整个顶点小说网的小说 1.scrapy的安装 这个安装教程,网上有很多的例子,这里就不在赘述了 2.关于scrapy scrapy框架 是一个非常好的东西,能够实现异步爬 ...

  4. Python爬虫新手入门教学:爬取前程无忧招聘信息

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 基本开发环境 Python 3.6 Pycharm 相关模块的使用 requests parsel ...

  5. Python爬虫入门教程30:爬取拉勾网招聘数据信息

    前言

  6. Python爬虫 scrapy框架爬取某招聘网存入mongodb解析

    这篇文章主要介绍了Python爬虫 scrapy框架爬取某招聘网存入mongodb解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 创建项目 sc ...

  7. Python搭建代理池爬取拉勾网招聘信息

    先来看一张图了解下爬虫 实现功能 多线程爬取拉勾网招聘信息 维护代理 ip 池 搭建 node 服务器 Taro 使用 echarts 做数据分析 1.多线程爬取拉勾网招聘信息 Tip:涉及知识 1. ...

  8. 什么你还不知道招聘信息,小唐来教你——最新2021爬取拉勾网招聘信息(一)

    文章目录 前言 一.准备我们的库 二.分析分析 三. 代码 四.数据展示 小唐的心路历程 上一篇:没有啦! 下一篇:什么你还不知道招聘信息,小唐来教你--最新2021爬取拉勾网招聘信息(二) 前言 有 ...

  9. 什么你还不知道招聘信息,小唐来教你——最新2021爬取拉勾网招聘信息(二)

    文章目录 前言 一.准备我们的库 二.数据清洗 三.核密度图及词云制作 四.完整代码 五.扩展 上一篇:什么你还不知道招聘信息,小唐来教你--最新2021爬取拉勾网招聘信息(一) 下一篇:没有拉! 前 ...

最新文章

  1. java刷新操作_java实现删除某条信息并刷新当前页操作
  2. 使用opencv自带的融合函数
  3. 逆水寒服务器新消息,游戏新消息:逆水寒太火爆服务器爆满王思聪都挤不进去...
  4. ASP.NET经典How to do文章汇总
  5. 转载:2014年流行的手机App小图标界面设计欣赏(1)
  6. zabbix初始化设置时无法到DB配置页面
  7. java中的equals方法+hashCode方法
  8. python安装哪个版本好啊_windows10安装哪个版本的Python?
  9. aspx隐藏前台控件div_c# – 代码隐藏页面无法“查看”aspx页面中声明的任何项目/控件...
  10. java ArrayList的实现
  11. php 匿名评论,关于php:PHP匿名类的用法
  12. 深入浅出Mybatis系列(六)---objectFactory、plugins、mappers简介与配置[转]
  13. 关于二级域名Cookie的问题及解决方法
  14. 中小型企业网络构建(思科)
  15. android输入法剪切板历史记录,Android Q 获取剪切板内容
  16. JAVA班车项目_JavaBooks/班车服务.md at master · Aim-Tric/JavaBooks · GitHub
  17. 日期格式化时候yyyy-MM-dd HH:mm:ss大小写区分
  18. 使用ifconfig结合awk提取主机的IP地址方法
  19. linux使用dd命令拷贝/生成文件
  20. java socket 卡住_Java socket通讯实现过程及问题解决

热门文章

  1. 婚姻是夫妻之间相互取悦
  2. 人在转运前,往往有两个征兆,有一个也要恭喜
  3. 极限与连续和可导的关系
  4. 怎么查看苹果设备UDID
  5. 微信小程序类美团用户商家距离计算
  6. TypeScript 自定义数组排序
  7. CSS常用选择器(通配符选择器,标签选择器,类选择器,id选择器.....),你知道多少?
  8. php css下划线,css下划线与文字之间的距离如何设置?
  9. [研发经验] 导致游戏研发不顺利的几个典型“边界问题”
  10. 我国的计算机硬件,浅谈我国计算机硬件的发展.pdf