【问题标题】:BeautifulSoup - Slow down requests.getBeautifulSoup - 减慢 requests.get
【发布时间】:2021-12-09 20:40:57
【问题描述】:

希望有人能给出答案。

我尝试抓取特定网站。

问题在于 requests.get(url) 非常快地抓取所有内容。

所以我被屏蔽了。

他们是减慢 requests.get(url) 的方法吗?

感谢您的帮助。

from bs4 import BeautifulSoup
import requests
url = 'website.fr'
response = requests.get(url)
print(response)

打印结果: 在您使用本网站时,您的浏览器或行为使我们认为您可能是机器人。解决下面的验证码以继续浏览该网站。

【问题讨论】:

    标签: python-3.x web-scraping beautifulsoup


    【解决方案1】:

    你应该配置一个超时,看看刮板是否适合你。

    r = requests.get('https://github.com', timeout=5)
    

    https://docs.python-requests.org/en/latest/user/advanced/#timeouts

    【讨论】:

      【解决方案2】:

      注意 虽然没有关于 url 的信息,但很难重现

      第一种方法可能是在您的请求中添加一些headers - 这不会减慢速度,但会指出“将有浏览器”。另一种方法是使用硒。

      示例

      from bs4 import BeautifulSoup
      import requests
      headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36", 
          "X-Amzn-Trace-Id": "Root=1-61acac03-6279b8a6274777eb44d81aae", 
          "X-Client-Data": "CJW2yQEIpLbJAQjEtskBCKmdygEIuevKAQjr8ssBCOaEzAEItoXMAQjLicwBCKyOzAEI3I7MARiOnssB" }
      url = 'https://www.france.fr/fr'
      response = requests.get(url, headers = headers)
      print(response)
      

      输出

      <Response [200]>
      

      如果您正在迭代 url,您还可以使用 time 模块添加相同的延迟:

      from bs4 import BeautifulSoup
      import requests, time
      
      ...
      
      for url in urls:
          time.sleep(3)
          response = requests.get(url, headers = headers)
      ...
      

      【讨论】:

      • 感谢您的帮助。有没有办法查看源中发送的标头?
      • 这始终取决于您与页面的交互方式以及机器人检测在服务器上的工作方式,...您可以在开发人员工具的网络选项卡中查看浏览器发送的标头
      • 很高兴为您提供帮助,欢迎来到 Stack Overflow。如果此答案或任何其他答案解决了您的问题,请将其标记为已接受 - someone-answers - 谢谢
      猜你喜欢
      • 1970-01-01
      • 2018-06-15
      • 2012-09-10
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多