admin 管理员组文章数量: 887021
1. 翻页请求的思路
回顾requests模块是如何实现翻页请求的:
(1)找到下一页的URL地址,并找出翻页以后的url中的那个参数变动了
(2)调用requests.get(url)
同样地scrapy实现翻页的思路:
(1)找到下一页的url地址,找出翻页后的变化规律,拼接url
(2) 构造url地址的请求,传递给引擎
2 .scrapy实现翻页请求
2.1 实现方法
(1)确定url地址并通过拼接参数的方式构建出新的翻页后的url
(2)构造请求,scrapy.Request(url,callback)
注:callback:指定解析函数名称,表示该请求返回的响应使用哪一个函数进行解析
(3)把请求交给引擎:yield scrapy.Request(url,callback)
2.2 爬取举例
通过爬取腾讯招聘的页面的招聘信息,学习如何实现翻页请求
思路分析:
(1)获取首页的数据
(2)寻找下一页的地址,进行翻页,获取数据
注意:
(1)可以在settings中设置ROBOTS协议
```
# False表示忽略网站的robots.txt协议,默认为True
ROBOTSTXT_OBEY = False
```
(2)可以在settings中设置User-Agent:
```
# scrapy发送的每一个请求的默认UA都是设置的这个User-Agent
USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36'
```
2.3 代码实现
在爬虫文件的parse方法中:
# 提取下一页的href并拼接url
next_url = 'https://hr.tencent/' + response.xpath('//a[text()="下一页"]/@href').extract_first()
# 判断是否是最后一页
if response.xpath('//a[text()="下一页"]/@href').extract_first() != 'javascript:;':
# 构造scrapy.Request对象,并yield给引擎
# 利用callback参数指定该Request对象之后获取的响应用哪个函数进行解析
# 利用meta参数将本函数中提取的数据传递给callback指定的函数
# 注意这里是yield
yield scrapy.Request(next_url, callback=self.parse)
2.4 scrapy.Request的更多参数
scrapy.Request(url[,callback,method="GET",headers,body,cookies,\
meta,dont_filter=False])
参数注释:
1. 中括号中的参数为可选参数
2. callback:表示当前的url的响应交给哪个函数去处理
3. meta:实现数据在不同的解析函数中传递,meta默认带有部分数据,比如下载延迟,请求深度等
4. dont_filter:默认为False,会过滤请求的url地址,即请求过的url地址不会继续被请求,对需要重复请求的url地址可以把它设置为Ture,比如贴吧的翻页请求,页面的数据总是在变化;start_urls中的地址会被反复请求,否则程序不会启动
5. method:指定POST或GET请求
6. headers:接收一个字典,其中不包括cookies
7. cookies:接收一个字典,专门放置cookies
8. body:接收一个字典,为POST的数据
版权声明:本文标题:scrapy中如何实现翻页抓取数据 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1726433503h959773.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论