我正在使用Python来刮页。直到现在我还没有什么复杂的问题。
我试图刮掉的站点使用了大量的安全检查,并且有一些机制来防止刮伤。
使用Requests和lxml,我能够在被IP禁止之前刮掉大约100到150页。有时我甚至被禁止第一次请求(新的IP,以前没有使用,不同的C块)。我尝试过欺骗头,在请求之间随机化时间,仍然一样。
我试过硒,结果好多了。使用Selenium,我能够在被禁止之前刮掉大约600-650页。在这里,我还尝试将请求随机化(在3-5秒之间,并对每300次请求进行time.sleep(300)调用)。尽管如此,我还是被禁止了。
从这里我可以得出结论,如果网站在一个开放的浏览器会话中请求超过X个页面或类似的东西,那么它就有一些禁止IP的机制。
根据您的经验,我还应该尝试什么呢?将在Selenium help中关闭和打开浏览器(例如,在每100次请求关闭和打开浏览器之后)。我正考虑尝试使用代理,但大约有百万页,这将是非常广泛的。
发布于 2016-02-01 15:12:39
如果您要切换到web抓取框架,您将能够重用许多防止和处理禁止的东西:
这是一个自动节流爬行速度的扩展,基于抓取服务器和您正在爬行的网站的负载。
scrapy-fake-useragent中间件旋转用户代理:使用每个请求都由假用户代理提供的随机用户代理。
- [Setting Scrapy proxy middleware to rotate on each request](https://stackoverflow.com/questions/20792152/setting-scrapy-proxy-middleware-to-rotate-on-each-request)
- [`scrapy-proxies`](https://github.com/aivarsk/scrapy-proxies)
- [Scrapy: Run Using TOR and Multiple Agents](http://pkmishra.github.io/blog/2013/03/18/how-to-run-scrapy-with-TOR-and-multiple-browser-agents-part-1-mac/)
发布于 2018-03-02 08:02:53
我也有这个问题。我在urllib中使用了tor和python3。
开放终端和类型:
curl --socks5-hostname localhost:9050 <http://site-that-blocked-you.com>如果你看到结果,它就成功了。
import socks
import socket
from urllib.request import Request, urlopen
from bs4 import BeautifulSoup
#set socks5 proxy to use tor
socks.set_default_proxy(socks.SOCKS5, "localhost", 9050)
socket.socket = socks.socksocket
req = Request('http://check.torproject.org', headers={'User-Agent': 'Mozilla/5.0', })
html = urlopen(req).read()
soup = BeautifulSoup(html, 'html.parser')
print(soup('title')[0].get_text())如果你看到
祝贺你。此浏览器配置为使用Tor。
它也适用于python,这意味着您正在使用tor进行web抓取。
发布于 2016-02-01 14:48:12
你可以用代理。
您可以以非常便宜的价格购买数百个IP,并像以前一样使用selenium。此外,我建议改变浏览器,您的使用和其他用户代理参数。
您可以使用一个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)https://stackoverflow.com/questions/35133200
复制相似问题