Scrapy因URL长度超2083自动忽略链接,如何设置不拦截长URL?
Scrapy关闭长URL自动过滤的解决方案
问题原因
这个过滤逻辑是Scrapy内置的UrlLengthMiddleware蜘蛛中间件触发的,默认将长度超过2083字符的URL判定为无效链接自动忽略,该阈值参考了旧版IE浏览器的URL长度限制设计,而现代浏览器和绝大多数Web服务都支持更长的URL,因此你手动粘贴到浏览器可以正常访问。
解决方法
方法一:调整长度校验阈值(更推荐)
如果不需要完全关闭校验,仅需要放宽长度限制,可以在Scrapy项目的settings.py文件中添加如下配置,将阈值调整为大于你实际需要处理的最长URL的数值即可:
# 示例将URL长度上限调整为10000字符,可按需修改 URLLENGTH_LIMIT = 10000
方法二:直接禁用URL长度校验中间件
如果要完全关闭该过滤规则,可以直接禁用对应的中间件,在settings.py中添加如下配置即可:
SPIDER_MIDDLEWARES = { 'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware': None, }
注意事项
修改配置后如果仍然出现长URL请求失败的情况,需要排查目标服务端是否本身存在URL长度限制,该类服务端限制和Scrapy无关,需要根据实际业务调整请求方式(比如将GET请求改为POST请求传递参数)。
内容的提问来源于stack exchange,提问作者chaim18
相关产品推荐
相关产品推荐

