【问题标题】:404: Is there any way to avoid being blocked by website while scraping using scrapy404:有什么办法可以避免在使用scrapy抓取的时候被网站屏蔽
【发布时间】:2016-02-02 16:45:54
【问题描述】:

我试图使用 Scrapy 来抓取一些网站上大约 70k 个项目。但是每次抓取大约 200 个项目后,其余的都会弹出错误:

scrapy] DEBUG: Ignoring response <404 http://www.somewebsite.com/1234>: HTTP status code is not handled or not allowed

我相信这是因为我的蜘蛛被网站屏蔽了,我尝试使用随机用户代理建议here,但它根本没有解决问题。有什么好的建议吗?

【问题讨论】:

  • 对我来说,这种情况下最好的解决方法是使用Kimono Labs,你可以从字面上抓取任何东西并创建一个 API,让他们担心禁止你获取 JSON 数据的情况,你可以简单地通过打他们的 API

标签: python scrapy scrapy-spider scrapy-pipeline


【解决方案1】:

如果您被阻止,您的蜘蛛可能过于频繁或过于快速地访问该网站。

除了随机用户代理之外,您还可以尝试在 settings.py 中设置 CONCURRENT_REQUESTS 和 DOWNLOAD_DELAY 选项。默认设置是相当激进的,并且会打击网站。

您拥有的其他选项是使用代理或将 AWS 与 nano 实例一起使用,它们每次重新启动都会获得一个新 IP。

请记住,抓取充其量只是一个灰色区域,您绝对需要尊重网站所有者。最好的方法显然是寻求所有者的许可,但如果做不到这一点,您需要确保您的抓取工作不会从通常的浏览模式中脱颖而出,否则您很快就会被阻止。

一些网站使用相当复杂的技术来识别抓取工具,包括 cookie 和 javascript,以及请求模式和网站停留时间等。还有许多基于云的反抓取解决方案,例如 distil 或 shieldsquare,如果你是你需要付出很多努力才能让你的蜘蛛看起来像人类!

【讨论】:

  • 尝试了 CONCURRENT_REQUESTS 和 DOWNLOAD_DELAY 仍然不起作用,我基本上是在尝试从确实中抓取简历,这可行吗?
【解决方案2】:

你能强迫别人回答你的问题或给你信息吗?您也不能强制使用 Web 服务器。充其量您可以尝试模拟 Web 服务器将响应的客户端。为此,您需要弄清楚服务器用于决定是否响应请求的标准,然后您可以(尝试)形成符合标准的请求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-07
    • 2014-05-25
    • 2013-05-09
    • 2020-10-12
    • 1970-01-01
    • 2017-08-30
    相关资源
    最近更新 更多