我试图使用 Scrapy 来抓取一些网站上大约 70k 个项目。但是每次抓取大约 200 个项目后,其余的都会弹出错误:
scrapy] DEBUG: Ignoring response <404 http://www.somewebsite.com/1234>: HTTP status code is not handled or not allowed
我相信这是因为我的蜘蛛被网站阻止了,我尝试使用这里建议的随机用户代理,但它根本没有解决问题。有什么好的建议吗?
我试图使用 Scrapy 来抓取一些网站上大约 70k 个项目。但是每次抓取大约 200 个项目后,其余的都会弹出错误:
scrapy] DEBUG: Ignoring response <404 http://www.somewebsite.com/1234>: HTTP status code is not handled or not allowed
我相信这是因为我的蜘蛛被网站阻止了,我尝试使用这里建议的随机用户代理,但它根本没有解决问题。有什么好的建议吗?
如果您被阻止,您的蜘蛛可能太频繁或太快地访问该站点。
除了随机用户代理之外,您还可以尝试在 settings.py 中设置 CONCURRENT_REQUESTS 和 DOWNLOAD_DELAY 选项。默认设置是相当激进的,并且会敲击一个站点。
您拥有的其他选项是使用代理或将 AWS 与 nano 实例一起使用,它们每次重新启动都会获得一个新 IP。
请记住,抓取充其量只是一个灰色区域,您绝对需要尊重网站所有者。最好的方法显然是寻求所有者的许可,但如果不这样做,您需要确保您的抓取工作不会从通常的浏览模式中脱颖而出,否则您很快就会被阻止。
一些网站使用相当复杂的技术来识别抓取工具,包括 cookie 和 javascript,以及请求模式和网站停留时间等。还有一些基于云的反抓取解决方案,例如 distil 或 shieldsquare,如果你反对你你需要付出很多努力才能让你的蜘蛛看起来像人类!
你能强迫别人回答你的问题或给你信息吗?您也不能强制使用 Web 服务器。充其量您可以尝试模拟 Web 服务器将响应的客户端。为此,您需要弄清楚服务器用来决定是否响应请求的标准,然后您可以(尝试)形成一个符合标准的请求。