我正在使用 Python
来抓取页面。到目前为止,我没有遇到任何复杂的问题。
我试图抓取的网站使用了大量的安全检查,并有一些机制来防止抓取。
使用 Requests
和 lxml
在被 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 许可协议
如果您切换到
Scrapy
网络抓取框架,您将能够重用一些为防止和解决禁令而制作的东西:scrapy-fake-useragent
中间件 _旋转用户代理_:_旋转 IP 地址_:
scrapy-proxies
您也可以 通过本地代理和 TOR 运行它: