Python中的抓取-防止IP禁止
我正在使用Python中的抓取-防止IP禁止,python,selenium,web-scraping,screen-scraping,Python,Selenium,Web Scraping,Screen Scraping,我正在使用Python来抓取页面。直到现在,我还没有遇到任何复杂的问题 我正在尝试清理的站点使用了大量的安全检查,并且有一些机制来防止清理 使用请求和lxml我能够在被IP禁止之前抓取大约100-150页。有时我甚至会在第一次请求时被禁止(新的IP,以前没有使用过,不同的C块)。我尝试过欺骗头,随机分配请求之间的时间,仍然是一样的 我尝试过硒,我得到了更好的结果。有了Selenium,我可以在被禁止之前浏览600-650页。在这里,我还尝试将请求随机化(在3-5秒之间,并在每300次请求时进行t
Python
来抓取页面。直到现在,我还没有遇到任何复杂的问题
我正在尝试清理的站点使用了大量的安全检查,并且有一些机制来防止清理
使用请求
和lxml
我能够在被IP禁止之前抓取大约100-150页。有时我甚至会在第一次请求时被禁止(新的IP,以前没有使用过,不同的C块)。我尝试过欺骗头,随机分配请求之间的时间,仍然是一样的
我尝试过硒,我得到了更好的结果。有了Selenium,我可以在被禁止之前浏览600-650页。在这里,我还尝试将请求随机化(在3-5秒之间,并在每300次请求时进行time.sleep(300)
调用)。尽管如此,我还是被禁止了
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)
从这里我可以得出结论,该网站有一些机制,如果它在一个开放的浏览器会话中请求超过X个页面或类似的内容,他们就会禁止IP
根据您的经验,我还应该尝试什么?
将在Selenium帮助中关闭和打开浏览器(例如,在每100次请求后关闭和打开浏览器)。我曾考虑尝试使用代理,但有大约百万的页面,这将是非常广阔的。您可以使用代理
您可以以非常便宜的价格购买几百个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)
如果您切换到,您将能够重用为防止和解决禁令而制作的许多东西:
- 内置的:
- 使用中间件轮换用户代理:
- 轮换IP地址:
- 您也可以通过本地代理运行它&TOR:
- 我也有这个问题。我在
python3
中使用了urllib
和tor
curl --socks5-hostname localhost:9050 <http://site-that-blocked-you.com>
如果你看到
祝贺你。此浏览器配置为使用Tor
它在python中也能工作,这意味着您正在使用tor进行web抓取。我不是Scrapy的粉丝,但我可能会尝试一下,尽管我不确定它是否会对我有帮助。我已经使用了你推荐的所有内容,但都没有通过限制。这只是一个一般性的答案,这样可以帮助其他人访问该主题。在你的情况下,我会说通过代理交换IP是一种方法。谢谢。你能推荐我可能使用的代理服务吗?谢谢,服务看起来不错,但不那么便宜。我甚至不确定我给代理的钱是否能覆盖我收集的信息的价值。如果你正在搜索的页面是由谷歌缓存的,你可以在谷歌中搜索它们并访问谷歌爬虫缓存的静态版本?不幸的是,网站使用登录表单,大多数页面在没有登录的情况下无法访问。因此谷歌无法缓存它们。在这种情况下,使用代理服务似乎是唯一合理的选择。我们如何使用chrome web驱动程序selenium和Python更改IP我们只想更新,tor浏览器现在正在侦听端口9150而不是9050。无法连接到本地主机。在所有这些操作之后,我仍然被IP地址禁止