Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的抓取-防止IP禁止_Python_Selenium_Web Scraping_Screen Scraping - Fatal编程技术网

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)

如果您切换到,您将能够重用为防止和解决禁令而制作的许多东西:

  • 内置的:
这是一个扩展,用于根据Scrapy服务器和正在爬网的网站的负载自动调节爬网速度

  • 使用中间件轮换用户代理:
在每个请求中使用假用户代理提供的随机用户代理

  • 轮换IP地址:

  • 您也可以通过本地代理运行它&TOR:


    • 我也有这个问题。我在
      python3
      中使用了
      urllib
      tor

    • 并安装tor浏览器
    • 测试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地址禁止