【问题标题】:Python Webscraping HTTP returns 403 Forbidden Status CodePython Webscraping HTTP 返回 403 禁止状态码
【发布时间】:2022-01-22 10:14:54
【问题描述】:

我正在尝试抓取该网站,但在网页抓取时我第一次遇到此代码时得到 403 代码,我真的不明白我必须做什么才能解决它。我想也许我可以使用 Selenium 来抓取页面,但我想知道是否有可能获得 AJAX 响应并获得 JSON 作为返回。如果无法获得退货,我能否解释原因?谢谢。

这是我的代码:

import requests
url = 'https://public-api.pricempire.com/api/item/loadGraph/14/1140'

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36'
}

r = requests.get(url, headers=headers)
print(r.status_code)

cURL 失眠生成的代码

import requests

url = "https://public-api.pricempire.com/api/item/loadGraph/14/875"

payload = ""
headers = {
    "authority": "public-api.pricempire.com",
    "pragma": "no-cache",
    "cache-control": "no-cache",
    "sec-ch-ua": "^\^"
}

response = requests.request("GET", url, data=payload, headers=headers)

print(response.text)

前两次我运行它,它给了我状态 200,但之后它给了我 403,我试图找出原因,但我不知道。

【问题讨论】:

  • 网站决定不想与您交谈。可能没有任何方法可以解释原因。
  • 你知道为什么当我在浏览器中输入链接时它返回一个 JSON 但通过 Python 请求它却没有吗?我对这部分感到困惑。
  • 可能它不喜欢您的用户代理或您的 IP 地址。

标签: python http request


【解决方案1】:

此页面看起来不公开,因此需要提前进行某种身份验证。在这种情况下,您需要查看使用了哪种身份验证机制,并尝试使用 requests 库来重现该机制。

所以在浏览器中打开网络检查器,转到网络选项卡,右键单击页面请求并复制为 cURL。可能你会在 headers 中看到一些 bearer token(或者可能会有一些带有 session_id 的 cookie),将它附加到你的程序 headers/cookies 中,它应该可以工作。

【讨论】:

  • 如果有困难,可以在这里粘贴 cURL 命令,这样就可以将它转换成 python 的代码
  • 谢谢,这样做了,前两次我从上面的编辑中运行代码时它工作了。但之后它只是返回 403,试图找出原因,只是不知道去哪里。
  • 这很简单——所有这些授权令牌都有一些过期时间。所以最有可能发生的事情是,您过去访问过该页面,以某种方式授权自己(例如通过登录名和密码或通过 facebook - OAuth 登录)并获得最近过期的此类令牌。如果您想完全自动化该过程,您需要使用 python 发送此类授权请求(例如,发送此登录名和密码以及正文)并使用您获得的令牌作为响应。如果你卡住了,我今天/明天会尝试准备示例
  • 谢谢你的解释,我有点明白了,我今晚下班后研究一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-17
  • 1970-01-01
  • 2021-11-06
  • 2020-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多