【python爬虫02】使用Scrapy框架爬取拉勾网招聘信息
使用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框架爬取拉勾网招聘信息相关推荐
- Python爬虫实战之一 - 基于Requests爬取拉勾网招聘信息,并保存至本地csv文件
Python爬虫实战之二 - 基于Requests抓取拉勾网招聘信息 ---------------readme--------------- 简介:本人产品汪一枚,Python自学数月,对于小白,本 ...
- python爬虫教程:Scrapy框架爬取Boss直聘网Python职位信息的源码
今天小编就为大家分享一篇关于Scrapy框架爬取Boss直聘网Python职位信息的源码,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧 分析 使用Crawl ...
- python爬虫(16)使用scrapy框架爬取顶点小说网
本文以scrapy 框架来爬取整个顶点小说网的小说 1.scrapy的安装 这个安装教程,网上有很多的例子,这里就不在赘述了 2.关于scrapy scrapy框架 是一个非常好的东西,能够实现异步爬 ...
- Python爬虫新手入门教学:爬取前程无忧招聘信息
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 基本开发环境 Python 3.6 Pycharm 相关模块的使用 requests parsel ...
- Python爬虫入门教程30:爬取拉勾网招聘数据信息
前言
- Python爬虫 scrapy框架爬取某招聘网存入mongodb解析
这篇文章主要介绍了Python爬虫 scrapy框架爬取某招聘网存入mongodb解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 创建项目 sc ...
- Python搭建代理池爬取拉勾网招聘信息
先来看一张图了解下爬虫 实现功能 多线程爬取拉勾网招聘信息 维护代理 ip 池 搭建 node 服务器 Taro 使用 echarts 做数据分析 1.多线程爬取拉勾网招聘信息 Tip:涉及知识 1. ...
- 什么你还不知道招聘信息,小唐来教你——最新2021爬取拉勾网招聘信息(一)
文章目录 前言 一.准备我们的库 二.分析分析 三. 代码 四.数据展示 小唐的心路历程 上一篇:没有啦! 下一篇:什么你还不知道招聘信息,小唐来教你--最新2021爬取拉勾网招聘信息(二) 前言 有 ...
- 什么你还不知道招聘信息,小唐来教你——最新2021爬取拉勾网招聘信息(二)
文章目录 前言 一.准备我们的库 二.数据清洗 三.核密度图及词云制作 四.完整代码 五.扩展 上一篇:什么你还不知道招聘信息,小唐来教你--最新2021爬取拉勾网招聘信息(一) 下一篇:没有拉! 前 ...
最新文章
- java刷新操作_java实现删除某条信息并刷新当前页操作
- 使用opencv自带的融合函数
- 逆水寒服务器新消息,游戏新消息:逆水寒太火爆服务器爆满王思聪都挤不进去...
- ASP.NET经典How to do文章汇总
- 转载:2014年流行的手机App小图标界面设计欣赏(1)
- zabbix初始化设置时无法到DB配置页面
- java中的equals方法+hashCode方法
- python安装哪个版本好啊_windows10安装哪个版本的Python?
- aspx隐藏前台控件div_c# – 代码隐藏页面无法“查看”aspx页面中声明的任何项目/控件...
- java ArrayList的实现
- php 匿名评论,关于php:PHP匿名类的用法
- 深入浅出Mybatis系列(六)---objectFactory、plugins、mappers简介与配置[转]
- 关于二级域名Cookie的问题及解决方法
- 中小型企业网络构建(思科)
- android输入法剪切板历史记录,Android Q 获取剪切板内容
- JAVA班车项目_JavaBooks/班车服务.md at master · Aim-Tric/JavaBooks · GitHub
- 日期格式化时候yyyy-MM-dd HH:mm:ss大小写区分
- 使用ifconfig结合awk提取主机的IP地址方法
- linux使用dd命令拷贝/生成文件
- java socket 卡住_Java socket通讯实现过程及问题解决
热门文章
- 婚姻是夫妻之间相互取悦
- 人在转运前,往往有两个征兆,有一个也要恭喜
- 极限与连续和可导的关系
- 怎么查看苹果设备UDID
- 微信小程序类美团用户商家距离计算
- TypeScript 自定义数组排序
- CSS常用选择器(通配符选择器,标签选择器,类选择器,id选择器.....),你知道多少?
- php css下划线,css下划线与文字之间的距离如何设置?
- [研发经验] 导致游戏研发不顺利的几个典型“边界问题”
- 我国的计算机硬件,浅谈我国计算机硬件的发展.pdf