上次挖了一个坑,今天终于填上了,还记得之前我们做的拉勾爬虫吗?那时我们实现了一页的爬取,今天让我们再接再厉,实现多页爬取,顺便实现职位和公司的关键词搜索功能。
之前的内容就不再介绍了,不熟悉的请一定要去看之前的文章,代码是在之前的基础上修改的
【图文详解】scrapy爬虫与动态页面——爬取拉勾网职位信息(1)
开始
还是回到我们熟悉的页面,这里,我们熟练的打开了Newwork标签,我们点下一页,看会出来什么结果
果然还是跳出来一个页面,但是貌似。。网址一样,我打开看一下
和之前不一样也!
一样的网址,结果不一样的结果,这怎么可能!!小伙伴是不是也和我一样,一脸懵B!
别急,我们继续看看别的信息
在preview我们看到了Pageno.2 说明确实不是同样的内容
Header
我们继续看header,貌似发现了不起的东西。
这个pn不就是pageno的简写吗?(什么,你怎么不知道有这个缩写?)我们可以再打开一个网页看看,事实证明,我是对的。
好的,我们现在知道页码信息在这里了,那要怎么把这个信息附加上呢??
Get or Post??
我们知道网页有两种方式传输数据,get和post,get是把需要传输的数据写到URL上,用户可以直观看见,就是我们之前一直使用的(比如搜索城市,工作经验,学历什么的)。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
scrapy实现post
看来我们得想办法用scrapy实现post了。
如果你还记得我们之前讲request的时候讲了request是可以轻松实现post的,那scrapy有request吗?毫无疑问是有的。我们在文档中找到了一个叫FormRequest
的对象,它能实现post功能,并给出了例子
我们在我们的之前代码中的class中加入一个start_requests
函数
def start_requests(self):
return [scrapy.http.FormRequest('http://www.lagou.com/jobs/positionAjax.json?px=new&city=%E5%8C%97%E4%BA%AC',
formdata={'pn':'2'},callback=self.parse)]
运行一下,出错了,才发现,原来目前拉勾的json结构改了,中间加了一个positionResult
修改代码:
jcontent = jdict["content"]
jposresult = jcontent["positionResult"]
jresult = jposresult["result"]
再运行一下,和第2页的一致,说明成功了
这里再说下,如果你在关键词里搜索,你会发现链接也不会变化,说明什么??说明也是用的post,比如我搜索大数据,可以看到kd
变成了大数据,所以我们也可以构造特定关键词的爬虫了。
实现自动翻页
我们只要能控制pn就行了,我们新增一个变量curpage
让它运行一次自加1,然后我们还是用之前的yield的方法
if self.curpage <= self.totalPageCount:
self.curpage += 1
yield scrapy.http.FormRequest('http://www.lagou.com/jobs/positionAjax.json?px=new&city=%E5%8C%97%E4%BA%AC', formdata={'pn':str(self.curpage)},callback=self.parse)
要说明的是,之前json文件里是有个totalPageCount
属性的,目前没了!所以不能直接从json文件中获取页数信息了,怎么办呢?如果你要细心观察就可以发现有个totalCount
属性,你做实验可以发现,每页都是15个,页数就是totalCount/15取整,如果页数大于30,只显示30页。
self.totalPageCount = jposresult['totalCount'] /15;
if self.totalPageCount > 30:
self.totalPageCount = 30;
这里我们爬所有北京有关“大数据”的工作
formdata={'pn':str(self.curpage),'kd':'大数据'}
好了大工告成!享受你的成果吧!!
这个工程我上传到了github,有兴趣的同学可以下载下来看看:
https://github.com/hk029/LagouSpider
【图文详解】scrapy爬虫与动态页面——爬取拉勾网职位信息(2)的更多相关文章
-
node.js爬虫爬取拉勾网职位信息
简介 用node.js写了一个简单的小爬虫,用来爬取拉勾网上的招聘信息,共爬取了北京.上海.广州.深圳.杭州.西安.成都7个城市的数据,分别以前端.PHP.java.c++.python.Androi ...
-
python爬虫(三) 用request爬取拉勾网职位信息
request.Request类 如果想要在请求的时候添加一个请求头(增加请求头的原因是,如果不加请求头,那么在我们爬取得时候,可能会被限制),那么就必须使用request.Request类来实现,比 ...
-
爬虫系列5:scrapy动态页面爬取的另一种思路
前面有篇文章给出了爬取动态页面的一种思路,即应用Selenium+Firefox(参考<scrapy动态页面爬取>).但是selenium需要运行本地浏览器,比较耗时,不太适合大规模网页抓 ...
-
scrapy抓取拉勾网职位信息(一)——scrapy初识及lagou爬虫项目建立
本次以scrapy抓取拉勾网职位信息作为scrapy学习的一个实战演练 python版本:3.7.1 框架:scrapy(pip直接安装可能会报错,如果是vc++环境不满足,建议直接安装一个visua ...
-
scrapy之盗墓笔记三级页面爬取
#今日目标 **scrapy之盗墓笔记三级页面爬取** 今天要爬取的是盗墓笔记小说,由分析该小说的主要内容在三级页面里,故需要我们 一一解析 *代码实现* daomu.py ``` import sc ...
-
scrapy抓取拉勾网职位信息(六)——反爬应对(随机UA,随机代理)
上篇已经对数据进行了清洗,本篇对反爬虫做一些应对措施,主要包括随机UserAgent.随机代理. 一.随机UA 分析:构建随机UA可以采用以下两种方法 我们可以选择很多UserAgent,形成一个列表 ...
-
python-scrapy爬虫框架爬取拉勾网招聘信息
本文实例为爬取拉勾网上的python相关的职位信息, 这些信息在职位详情页上, 如职位名, 薪资, 公司名等等. 分析思路 分析查询结果页 在拉勾网搜索框中搜索'python'关键字, 在浏览器地址栏 ...
-
scrapy抓取拉勾网职位信息(八)——使用scrapyd对爬虫进行部署
上篇我们实现了分布式爬取,本篇来说下爬虫的部署. 分析:我们上节实现的分布式爬虫,需要把爬虫打包,上传到每个远程主机,然后解压后执行爬虫程序.这样做运行爬虫也可以,只不过如果以后爬虫有修改,需要重新修 ...
-
scrapy抓取拉勾网职位信息(三)——爬虫rules内容编写
在上篇中,分析了拉勾网需要跟进的页面url,本篇开始进行代码编写. 在编写代码前,需要对scrapy的数据流走向有一个大致的认识,如果不是很清楚的话建议先看下:scrapy数据流 本篇目标:让拉勾网爬 ...
随机推荐
-
ubuntu12.10 源更新出错(sudo apt-get update)
Ubuntu12.10 刚安装完发现vi编辑器无法正常使用,后来用sudo apt-get install vim 一直出错,搜索相关资源发现需要更新源 首先,备份一下Ubuntu 12.10 原来的 ...
-
const int * pi/int * const pi的区别
前面有一篇文章:数组名就是常量指针 参考文章:http://blog.pfan.cn/whyhappy/5164.html const int * pi .int const * pi与int * ...
-
[POJ 3420] Quad Tiling
Quad Tiling Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3495 Accepted: 1539 Des ...
-
C++ Preprosessor import
#import Attributes Provides links to attributes used with the #import directive. Microsoft Specific ...
-
VUE项目的目录关系
1.页面中只有一个index.html. 2.一个js文件.在路由中. 3.主要的app.vue. 4.最后就是可以放多个vue文件的~~(一个页面对应一个vue文件,一个vue组件对应一个js中的i ...
-
oracle错误汇总2
http://blog.itpub.net/30430420/viewspace-1799925/ ============================= 现象!!!!!!!!!!!!!!!!!S ...
-
浅谈C#在网络波动时防重复提交
前几天,公司数据库出现了两条相同的数据,而且时间相同(毫秒也相同).排查原因,发现是网络波动造成了重复提交. 由于网络波动而重复提交的例子也比较多: 网络上,防重复提交的方法也很多,使用redis锁, ...
-
Test Design Techniques - STATE BASED TESTING
Test Design Techniques - STATE BASED TESTING -Test note of “Essential Software Test Design” 2015-08- ...
-
【转】VISUAL STUDIO 2008代码指标为您节省资金
转自:https://www.geekzone.co.nz/vs2008/4773 Visual Studio 2008 Team Developer和Team Suite版本中提供的许多新功能之一是 ...
-
Windows:chm 文件打开出现“已取消到该网页的导航”的解决方案
症状 解决方案