【问题标题】:Request Returns Response 447请求返回响应 447
【发布时间】:2018-12-31 03:15:33
【问题描述】:

我正在尝试使用请求和 BeautifulSoup 抓取网站。当我运行代码来获取 webbpage 的标签时,soup 对象是空白的。我打印出请求对象,看看请求是否成功,没有。打印结果显示响应 447。我找不到 447 作为 HTTP 状态代码的含义。有谁知道我如何成功连接和抓取网站?

代码:

r = requests.get('https://foobar)
soup = BeautifulSoup(r.text, 'html.parser')
print(soup.get_text())

Output:
''

当我打印请求对象时:

print(r)

Output:
<Response [447]>

【问题讨论】:

  • 我会搜索特定的网站,看看是否有文档列出了他们的响应代码。此外,很难回答您的问题,即如何成功抓取您未提供的网站(网站是什么?)任何人都可以做的就是回答您通常如何做,您的代码在正常情况下应该工作。

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


【解决方案1】:

站点很可能已确认您的活动,因此它阻止了您的访问,您可以通过在对站点的请求中包含标头来解决此问题。

import bs4
import requests
session=requests.session()
headers={"User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0","Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"}
req=session.get(url,headers=headers)
soup=bs4.BeautifulSoup(req.text)

【讨论】:

  • timmy 您的解决方案非常有效。你能进一步解释一下标题是如何让某人绕过区块的吗?
  • 每当您使用python或正常浏览打开站点时,都会向站点发送某些标头,最常见的标头是“用户-代理”,“连接”和“接受”,当您打开使用 python 获取页面源的站点您的 User-Agent 是“Python-urllib/3.4”(或您拥有的 urllib 的任何版本),这使得站点可以轻松检测机器人或蜘蛛,从而禁止它们或禁止他们的 IP 地址。当您在正常浏览中打开站点时,您的 User-Agent 更像人类,例如 Mozilla 或 Chrome 或其他任何东西,请求库允许您更改标题
  • timmy 有道理。我将在未来的抓取中包含标题。感谢您的帮助。
【解决方案2】:

听起来他们有浏览器检测软件,但他们不喜欢你的浏览器。 (意味着他们不喜欢你没有浏览器)

虽然 447 不是 http 的标准错误状态,但它偶尔会在 smtp 中使用,因为请求太多。

在不知道您正在查看的特定网站的情况下,不太可能有人能够为您提供更多信息。您可能只需要添加标题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-18
    • 2021-07-10
    • 2017-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多