【问题标题】:how can we make our scraping to look like a real person browsing我们怎样才能让我们的抓取看起来像一个真实的人浏览
【发布时间】:2020-04-01 15:54:57
【问题描述】:

所以,我正在抓取一个网站,但时不时地我会被临时禁止几分钟。我在我的代码中使用标题进行抓取,但我想知道是否还有更多的东西可以让我们看起来像一个真实的人,而不仅仅是一个机器人。

我研究了一下,发现我们可以让我们的抓取速度稍微慢一点,也可以绕过检测。

我想听听您的想法和建议。

ua=UserAgent()
   hdr = {'User-Agent': ua.random,
  'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
  'Accept-Encoding': 'none',
  'Accept-Language': 'en-US,en;q=0.8',
  'Connection': 'keep-alive'}

(不得不放这个代码,因为它不允许我发布它!)

【问题讨论】:

标签: web-scraping beautifulsoup python-requests


【解决方案1】:

您可以做的其中一件事是让您的 time.sleep 随机。机器人跟上节奏,而人类则不稳定。

需要导入随机库

   import random

然后您将 time.sleep 更改为如下内容:

  time.sleep(random.randint(3,15))

【讨论】:

    【解决方案2】:

    避免被禁止的一种方法是不要以如此大的力量炸毁该网站,因为那样他们肯定不会采取行动,因为使用浏览器的人将无法以如此快的速度访问该网站,因此它一定是机器人.因此,在每秒发送的请求数上放慢一点会有所帮助。解决此问题的另一种方法是使用代理。如果您被禁止一段时间,这意味着他们已经记录了您的 IP 地址并阻止了它。如果您在阻止一个 IP 时使用代理,您可以切换到另一个并继续您的快乐抓取方式,这是更复杂的机器人和蜘蛛的主要组成部分之一,而且这并不难做到。

    import requests
    from bs4 import BeautifulSoup as bs
    
    def crawler():
       headers = {headers}
       proxies = {proxies}
       url = url
       requests.get(url, headers=headers, proxies=proxies)
    

    这样您的 IP 地址就被隐藏了。所有代理地址并非在所有位置都有效,所以我在使用它们时倾向于将它们放在某个文件中。我读取文件并遍历从文件中获取的代理,直到我得到一个可以在我当前位置工作的代理,然后可以开始抓取,而不必担心我的 IP 被阻止。看看这个post 如果仍然对代理如何与请求库和漂亮的汤一起工作有疑问

    【讨论】:

    • 我通常使用 JSON 文件来存储在不同位置工作的大多数代理,这样我就不必自己硬编码它们我可以从 JSON 文件中读取它们,将它们转换为python 字典并在我的代码中使用它们,如图所示
    猜你喜欢
    • 2016-11-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-28
    • 2012-04-22
    相关资源
    最近更新 更多