昨天在爬寻医问药网站的时候出现了一个没有遇到过的问题:
ValueError: Missing scheme in request url:
查了百度,bings都没能解决,归纳起来网上的解决办法围绕的都是图片路径等详细问题,归根结底就是url并不完整,可以单纯地通过:
url = "http"+response.xpath("....")[0]
这样的方式解决。
解决办法
然鹅,我的代码在前面几步都是能完整输出新的url值的,意味着url足够完整,所以不是上述问题。
最后发现有些大神们的代码会在request的括号后面多加一句
dont_filter=Ture
问题就被完美解决了!
原因分析
查了一下,scrapy会对request的URL去重(RFPDupeFilter),加上dont_filter则告诉它这个URL不参与去重。
两种方法能够使 requests 不被过滤:
- 在 allowed_domains 中加入 url
- 在 scrapy.Request() 函数中将参数 dont_filter=True 设置为 True
意思就是,scrapy可能会处于一些原因把没有问题的url过滤掉,我们只有加上这样的命令才能防止丢失。