在 Python 中抓取 - 防止 IP 禁令

新手上路,请多包涵

我正在使用 Python 来抓取页面。到目前为止,我没有遇到任何复杂的问题。

我试图抓取的网站使用了大量的安全检查,并有一些机制来防止抓取。

使用 Requestslxml 在被 IP 禁止之前,我能够抓取大约 100-150 页。有时我什至会在第一次请求时被禁止(新 IP,之前未使用过,不同的 C 块)。我试过欺骗标头,随机化请求之间的时间,仍然是一样的。

我已经尝试过使用 Selenium,并且得到了更好的结果。使用 Selenium,在被禁止之前我能够抓取大约 600-650 页。在这里,我还尝试随机化请求(在 3-5 秒之间,并使 time.sleep(300) 每 300 个请求调用一次)。尽管如此,我还是被禁止了。

从这里我可以得出结论,该网站有一些机制,如果它在一个打开的浏览器会话或类似的东西中请求超过 X 个页面,他们会禁止 IP。

根据您的经验,我还应该尝试什么? 将在 Selenium 帮助中关闭和打开浏览器(例如,在每第 100 个请求后关闭和打开浏览器)。我正在考虑尝试使用代理,但大约有数百万页,而且会非常庞大。

原文由 RhymeGuy 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 341
1 个回答

如果您切换到 Scrapy 网络抓取框架,您将能够重用一些为防止和解决禁令而制作的东西:

这是一个基于 Scrapy 服务器和您正在抓取的网站的负载自动限制抓取速度的扩展。

每个请求都使用由 fake-useragent 提供的随机用户代理

原文由 alecxe 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题