【问题标题】:What headers am I missing to scrape the NBA Stats data?我缺少哪些标题来抓取 NBA 统计数据?
【发布时间】:2020-01-23 21:04:10
【问题描述】:

几天前,在 Power BI 中,我能够创建一个 Web 查询,允许我从 NBA Player Stats 提取 JSON 数据,而无需使用任何标头。截至今天,我注意到该查询不再有效;我收到以下错误消息:

DataSource.Error: The underlying connection was closed. An unexpected error occurred on a receive.
Details: https://stats.nba.com/stats/leaguedashplayerstats?College=&Conference=&Country=&DateFrom=&DateTo=&Division=&DraftPick=&DraftYear=&GameScope=&GameSegment=&Height=&LastNGames=0&LeagueID=00&Location=&MeasureType=Base&Month=0&OpponentTeamID=0&Outcome=&PORound=0&PaceAdjust=N&PerMode=PerGame&Period=0&PlayerExperience=&PlayerPosition=&PlusMinus=N&Rank=N&Season=2019-20&SeasonSegment=&SeasonType=Regular+Season&ShotClockRange=&StarterBench=&TeamID=0&TwoWay=0&VsConference=&VsDivision=&Weight=

在相关说明中,我曾经能够使用 https://stats.nba.com/ 作为 Referer 标头从 NBA Team Stats 中提取 JSON 数据,但现在它给了我与上图相同的错误消息。为了尝试解决这些错误,我尝试输入以下标题:

Host: stats.nba.com
Connection: keep-alive
Accept: application/json
x-nba-stats-token: true
User-Agent: Chrome/79.0.3945.130
x-nba-stats-origin: stats
Referer: https://stats.nba.com/
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9

当我使用上述标题提交查询时,它会返回以下错误消息:

Unable to connect

We encountered an error while trying to connect.

Details: "The 'Host' header must be modified using the appropriate property or method.
Parameter name: name"

对于如何正确运行查询,我已经没有想法了。我对网络抓取和 HTML 真的很陌生——我一直在努力自学。非常感谢任何帮助。

【问题讨论】:

  • 请将错误消息添加为文本,而不是屏幕截图。
  • 请注意,您可能违反了网站的服务条款。你在这里踩着摇摇欲坠的法律基础......
  • 已更新。感谢您的提醒。

标签: html json web-scraping powerbi host


【解决方案1】:

GET 请求的所有标头:

Host: stats.nba.com
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Accept: application/json, text/plain, */*
x-nba-stats-token: true
X-NewRelic-ID: VQECWF5UChAHUlNTBwgBVw==
DNT: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36
x-nba-stats-origin: stats
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Referer: https://stats.nba.com/teams/traditional/?sort=TEAM_NAME&dir=-1
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US;q=0.9,en;q=0.7

网址:

https://stats.nba.com/stats/leaguedashteamstats?Conference=&DateFrom=&DateTo=&Division=&GameScope=&GameSegment=&LastNGames=0&LeagueID=00&Location=&MeasureType=Base&Month=0&OpponentTeamID=0&Outcome=&PORound=0&PaceAdjust=N&PerMode=PerGame&Period=0&PlayerExperience=&PlayerPosition=&PlusMinus=N&Rank=N&Season=2019-20&SeasonSegment=&SeasonType=Regular+Season&ShotClockRange=&StarterBench=&TeamID=0&TwoWay=0&VsConference=&VsDivision=

必填标题:

Accept: application/json, text/plain, */*
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36
x-nba-stats-origin: stats
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Referer: https://stats.nba.com/teams/traditional/?sort=TEAM_NAME&dir=-1

不确定是否需要:

x-nba-stats-token: true
X-NewRelic-ID: VQECWF5UChAHUlNTBwgBVw==

可能的问题

  1. 您检测为机器人并被阻止

  2. 标头X-NewRelic-ID 是一个令牌(可能有超时)。可能它是使用不同的参数分配的,例如IP、User-Agent 等等。
    您可以通过对https://stats.nba.com/ 的GET 请求在HTML 响应中获得新鲜的X-NewRelic-ID。 这是带有xpid 标记的HTML 的一部分: <script type="text/javascript">(window.NREUM||(NREUM={})).loader_config={xpid:"VQECWF5UChAHUlNTBwgBVw==",licenseKey:"09f0cb5c68",applicationID:"76210961"};

【讨论】:

  • 输入所有这些标头后,它给我的“无法连接”错误消息与我在关于“主机”标头的问题中遇到的相同。
  • 检查答案更新。我认为您被检测为机器人并被阻止。从不同的IP尝试。您可以为此使用代理。
  • 您是否能够提取 JSON 数据?我很想知道你是否能够这样做,这样我就可以确定这是否是我的目标 - 就像我被检测为机器人一样。
  • 是的,我可以解压
  • 您是否使用了所有必需的标头?我试过做要求的,还有x-nba-stats-token: trueX-NewRelic-ID: VQECWF5UChAHUlNTBwgBVw==,但是还是拉不出来。
猜你喜欢
  • 2017-05-26
  • 1970-01-01
  • 2021-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-24
相关资源
最近更新 更多