如何解决使用 HTTP Post 和 Requests 库在 Cloudflare 背后使用 API
我对 Python 有点陌生,但我是 Mathematica (Wolfram) 语言的专家,所以我不是新手程序员。我做了很多网站抓取,并在这方面取得了成功。最近,我成功抓取的一个网站发生了变化,现在我无法使用他们的 API。
通常,在使用(抓取)API 时,我的方法是打开 Chrome 并使用检查器查找 XHR 调用。然后将该调用复制为 cURL,然后使用此 site 将其转换为 python 请求调用。即使对于支持 cloudflare 的网站,这在过去也很有效。对于 cloudflare 背后的站点,我会手动登录并将 cookie 复制到代码中。这一直有效,直到该站点更改了他们的代码。
我做了那个过程,我的python请求代码如下。我正在尝试抓取 https://sportsbet.io/sports 网站。这个特殊的电话是获取所有篮球联赛。
import requests
headers = {
'authority': 'sportsbet.io','accept': '*/*','authorization': '','user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/87.0.4280.88 Safari/537.36','content-type': 'application/json','origin': 'https://sportsbet.io','sec-fetch-site': 'same-origin','sec-fetch-mode': 'cors','sec-fetch-dest': 'empty','referer': 'https://sportsbet.io/sports/basketball/inplay','accept-language': 'en-US,en;q=0.9'
}
data = '${"operationName":"SportEventListQuery","variables":{"language":"en","site":"sportsbet","slug":"basketball","timePeriod":"LIVE","leagueTournaments":"LIVE","featuredLeagueTournaments":"LIVE","tournamentEventCount":"LIVE"},"query":"query SportEventListQuery($language: String\\u0021,$slug: String\\u0021,$timePeriod: SportsbetNewGraphqlSportLeagues\\u0021,$leagueTournaments: SportsbetNewGraphqlLeagueTournaments\\u0021,$featuredLeagueTournaments: SportsbetNewGraphqlFeaturedLeagueTournaments\\u0021,$tournamentEventCount: SportsbetNewGraphqlTournamentEventCount\\u0021) {\\\\n sportsbetNewGraphql {\\\\n id\\\\n getSportBySlug(slug: $slug) {\\\\n id\\\\n featuredLeague {\\\\n id\\\\n name(language: $language)\\\\n tournaments(childType: $featuredLeagueTournaments) {\\\\n id\\\\n name(language: $language)\\\\n eventCount(childType: $tournamentEventCount)\\\\n league {\\\\n id\\\\n name(language: $language)\\\\n __typename\\\\n }\\\\n __typename\\\\n }\\\\n __typename\\\\n }\\\\n name(language: $language)\\\\n leagues(childType: $timePeriod) {\\\\n id\\\\n name(language: $language)\\\\n slug\\\\n tournaments(childType: $leagueTournaments) {\\\\n id\\\\n name(language: $language)\\\\n eventCount(childType: $tournamentEventCount)\\\\n __typename\\\\n }\\\\n __typename\\\\n }\\\\n __typename\\\\n }\\\\n __typename\\\\n }\\\\n}\\\\n"}'
response = requests.post('https://sportsbet.io/graphql',headers=headers,data=data)
print(response)
我收到 403 错误。寻求有关如何使用(抓取)此 API 的一些指导。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。