Rhy*_*Guy 12 python selenium screen-scraping web-scraping
我正在Python用来刮页.到现在为止,我没有任何复杂的问题.
我正在尝试抓取的网站使用了大量的安全检查,并有一些机制来防止抓取.
使用Requests和lxml我在被IP禁止之前能够刮掉大约100-150页.有时我甚至会在第一次请求时被禁止(新的IP,之前没有使用,不同的C块).我试过使用欺骗标题,在请求之间随机化时间,仍然是相同的.
我尝试过Selenium,我得到了更好的结果.有了Selenium,在被禁止之前,我能够刮掉大约600-650页.在这里,我也尝试随机化请求(3-5秒之间,并time.sleep(300)在每300个请求上调用).尽管如此,我被禁止了.
从这里我可以得出结论,如果网站在一个打开的浏览器会话中请求超过X个页面或类似的东西,那么它们会禁止IP.
根据您的经验,我还应该尝试什么? 将在Selenium中关闭和打开浏览器帮助(例如在每100个请求关闭并打开浏览器之后).我正在考虑尝试使用代理,但是有大约数百万个页面,而且它将非常广泛.
ale*_*cxe 14
如果您切换到ScrapyWeb抓取框架,您将能够重用许多用于防止和解决禁止的事情:
这是基于Scrapy服务器和您正在抓取的网站的负载自动限制爬网速度的扩展.
scrapy-fake-useragent中间件旋转用户代理:使用每个请求由fake-useragent提供的随机User-Agent
转动IP地址:
你也可以通过本地代理和TOR运行它:
Moh*_*eza 11
我也有这个问题。我使用urllib了torin python3。
打开终端并输入:
curl --socks5-hostname localhost:9050 <http://site-that-blocked-you.com>
Run Code Online (Sandbox Code Playgroud)
如果你看到结果,它就起作用了。
curl --socks5-hostname localhost:9050 <http://site-that-blocked-you.com>
Run Code Online (Sandbox Code Playgroud)
如果你看到
恭喜。此浏览器配置为使用 Tor。
它也适用于python,这意味着您正在使用tor进行网络抓取。
你可以使用代理.
您可以以非常便宜的价格购买数百种IP,并像以前一样使用硒.此外,我建议改变您使用的浏览器和其他用户代理参数.
您可以使用单个IP地址迭代以仅加载x个页面并在被禁止之前停止.
def load_proxy(PROXY_HOST,PROXY_PORT):
fp = webdriver.FirefoxProfile()
fp.set_preference("network.proxy.type", 1)
fp.set_preference("network.proxy.http",PROXY_HOST)
fp.set_preference("network.proxy.http_port",int(PROXY_PORT))
fp.set_preference("general.useragent.override","whater_useragent")
fp.update_preferences()
return webdriver.Firefox(firefox_profile=fp)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16234 次 |
| 最近记录: |