我正在使用Python
爬取网页。到目前为止,我没有遇到任何复杂的问题。
我想要爬取的网站使用了许多安全检查,并且有一些机制来防止爬取。
使用Requests
和lxml
,我能够在被封禁之前爬取大约100-150页。有时我甚至在第一个请求(新的IP,之前没有使用过,不同的C块)上就被封禁了。我已经尝试过伪造标题、随机化请求之间的时间,但结果都相同。
我尝试过用Selenium,获得了更好的结果。使用Selenium,我能够在被封禁之前爬取大约600-650页。在这里,我也尝试了随机请求(3-5秒之间),并在每300个请求上使用time.sleep(300)
进行调用。尽管如此,我仍然被封禁了。
从这里我可以得出结论:如果在一个打开的浏览器会话中请求的页面超过X页,则该网站会禁用IP。
根据您的经验,还应该尝试什么? 关闭并重新启动Selenium中的浏览器是否有帮助(例如,在每100个请求之后关闭并重新启动浏览器)?我正在考虑尝试使用代理,但是网站有大约一百万个页面,这将非常昂贵。