当前位置:网站首页>使用 Scrapy 框架对重复的 url 无法获取数据,dont_filter=True
使用 Scrapy 框架对重复的 url 无法获取数据,dont_filter=True
2022-08-03 09:26:00 【月亮给我抄代码】
场景:代码没有报错,而且确定 xpath 表达式正确解析。
可能的原因是:你使用了 Scrapy 对重复的 url 进行请求。
Scrapy 内置了重复过滤功能,默认情况下该功能处于打开状态。
如下实例,parse2 无法被调用:
import scrapy
class ExampleSpider(scrapy.Spider):
name ="test"
# allowed_domains = ["https://www.baidu.com/"]
start_urls = ["https://www.baidu.com/"]
def parse(self,response):
yield scrapy.Request(self.start_urls[0],callback=self.parse2)
def parse2(self, response):
print(response.url)Scrapy 在进入 parse 时,会默认请求一次 start_urls[0],而当你在 parse 中又对 start_urls[0] 进行请求时,Scrapy 底层会默认过滤掉重复的 url,不会对该请求进行提交,这就是为什么 parse2 不被调用的原因。
解决方法:
添加 dont_filter=True 参数,这样 Scrapy 就不会过滤掉重复的请求。
import scrapy
class ExampleSpider(scrapy.Spider):
name ="test"
# allowed_domains = ["https://www.baidu.com/"]
start_urls = ["https://www.baidu.com/"]
def parse(self,response):
yield scrapy.Request(self.start_urls[0],callback=self.parse2,dont_filter=True)
def parse2(self, response):
print(response.url)此时,parse2 会被正常调用。
边栏推荐
猜你喜欢
随机推荐
RSTP(端口角色+端口状态+工作机制)|||| 交换机接口分析
flush tables
Does setting the following sysctl settings require a system reboot?
Automated test browser driver download version
MySQL-存储过程-函数-
深度学习之 10 卷积神经网络2
Flink Yarn Per Job - 启动AM
Redis的基础与django使用redis
Network LSTM both short-term and long-term memory
SQL Daily Practice (Nioke New Question Bank) - Day 5: Advanced Query
验证浮点数输入
Let‘s Encrypt 使用
二叉查找树的插入
Oracle 数据如何迁移到MySQL 图文详细教程
深度学习之 10 卷积神经网络1
【字节面试】word2vector输出多少个类别
Oracle数据库表空间整理回收与释放操作
ClickHouse删除数据之delete问题详解
Flink Yarn Per Job - Submit application
【网络安全】Kail操作系统









