微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python 请求 403 为 json,但在浏览器中工作正常

如何解决python 请求 403 为 json,但在浏览器中工作正常

我正在尝试从 etoro 获取数据。此链接在我的浏览器 https://www.etoro.com/sapi/userstats/CopySim/Username/viveredidividend/OneYearAgo 中有效,但即使我添加用户代理、标题甚至 cookie,它也被禁止通过 request.get()

import requests
url = "https://www.etoro.com/sapi/userstats/copySim/Username/viveredidividend/OneYearago"
headers = {
    'Host': 'www.etoro.com','User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:89.0) Gecko/20100101 Firefox/89.0','Accept': '*/*','Accept-Language': 'en-US,en;q=0.5','Accept-Encoding': 'gzip,deflate,br','Connection': 'keep-alive','Referer': 'https://www.etoro.com/people/viveredidividend/chart','Cookie': 'XXX','TE': 'Trailers'
}
requests.get(url,headers=headers)
>>> <Response [403]>

无硒如何解决

解决方法

当您未在浏览器中验证 Python 代码时会出现此错误。当您使用网站登录时,它经过身份验证并记住它,这就是为什么您可以按站点在浏览器中使用和正常工作的原因。

为了解决这个问题,你首先需要在你的python代码中对浏览器进行身份验证。

要进行身份验证,

 import requests

response = requests.get(url,auth=(username,password))
,

错误 403 表示您发出的请求被阻止。实际上,该网站受 cloudflare 保护,可防止网站被抓取。您可以通过在代码中执行 statsmodels 来检查它,您将在标题标签内返回的 cloudflare HTML 中看到 print(response.text)

在后台,当您发送请求时,它会通过 cloudflare 服务器并验证它是否来自真实浏览器。如果请求通过验证,则仅将请求转发到返回有效响应的网站服务器。否则,cloudflare 会阻止请求。

很难绕过 cloudflare。不过,您可以使用下面给出的代码试试运气。

代码

Access denied | www.etoro.com used Cloudflare to restrict access

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。