赞
踩
常见的两种是通过分析每页URL或者是请求体发现规律写通用URL跟查找当前页面中下一页面的URL实现翻页!
适用于有【下一页】按钮的网站,且能获取到【下一页】URL的。
而往往我们获取的下一页URL并不是完整的,那该怎么去补全URL?
以下介绍了三种方法 拼接法、补全法、自动识别。
【注】part_next_url:是通过xpath获取的部分下一页 url ; self.start_urls[0]:是我们第一次启动爬虫请求的request 。
# 第一种 拼接法
root_url = 'https://www.guokr.com'
next_url = root_url + part_next_url
# print(next_url)
# 翻页
# 第一种翻页 callback 获取的下一页的url,需要手动指定,将获取的响应,交给parse处理
yield scrapy.Request(next_url, callback=self.parse)
# 第二种 补全法
from urllib.parse import urljoin
root_url = self.start_urls[0]
next_url = urljoin(root_url, part_next_url)
# print(next_url)
# 翻页
# 第二种翻页 callback 获取的下一页的url,也是需要手动指定,将获取的响应,交给parse处理
yield scrapy.Request(next_url, callback=self.parse)
# 第三种(自动根据response 里面的url,进行识别补全)
# 翻页
yield response.follow(part_next_url, callback=self.parse)
适用于没有【下一页】按钮,或者【下一页】按钮获取不到URL时
是不是现在觉得第一种方法翻页带有一定的局限性啊!
第一种方法是基于当前页中的【下一页】去获取URL,但有些网站并没有这么设计。比如说下面这种,并不能通过【下一页】获取到URL。
通过分析每一页URL来寻找规律,
再比如说 糗事百科 每一页的url如下:
第一页
:https://www.qiushibaike.com/text/
第二页
:https://www.qiushibaike.com/text/page/2/
第三页
:https://www.qiushibaike.com/text/page/3/
…
通过上面我们会发现,第二页时,结尾带的参数是2,第三页时,结尾带的参数是3,后面也是一样,那是不是说第几页这个结尾参数就是几,那第一页也不同啊?
那我们测试下,按照我们刚才发现的规律去仿写第一页,那是不是就是https://www.qiushibaike.com/text/page/1/
, 带着这个url去访问,发现确实是第一页的内容,说明最后数字是几,那就是第几页。
代码如下:
page = 2
def parse(self, response):
# ...<parse方法中间的代码块这里先省略>
# 翻页
if self.page <= 50:
next_url = 'https://www.qiushibaike.com/text/page/{}/'.format(self.page)
self.page += 1
yield scrapy.Request(next_url, callback=self.parse)
【拓展】
细心的小朋友发现没,我的是从2开始的,以前我们知道为什么从1开始,因为一般都没有第0页对吧,
但为什么这里是从2开始呢?
因为我们一开始已经定义好了起始的URL(
start_urls
),即第一页的URL。也就是说,第1页的URL并不需要我们去获取、去发起请求,所以我们,直接从2开始就行。其实也可以从1开始,且结果都是一样,只是这是多余的一步!
那为什么从第1页得到的结果也是一样的呢?不应该是第一页内容会重复吗?
我们了解下Scrapy,它是有
去重
功能的,在爬虫中是会去除已经爬取过的URL,避免重复爬取,既影响爬虫效率,又产生冗余数据。
这个拓展也只是了解认识下Scrapy的一些特性,从多少开始,具体还是看实际需求。
以上就是我目前所掌握的,如果有理解错误的,还请大佬在评论区指出来,非常感谢!
以上就是Scrapy翻页那些事的所有内容了,点赞收藏加评论是最大的支持哦!
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/887454
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。