【问题标题】:python: Scraping Data from NBA.compython: 从 NBA.com 抓取数据
【发布时间】:2017-04-23 22:30:20
【问题描述】:

我正在尝试使用 Python 从 NBA.com 抓取数据,但在运行我的代码(如下所示)等待一段合理的时间后,我没有收到响应。

import requests
import json

url_front = 'http://stats.nba.com/stats/leaguedashplayerstats?College=&' + \
            'Conference=&Country=&DateFrom=&DateTo=&Division=&DraftPick=&' + \
            'DraftYear=&GameScope=&GameSegment=&Height=&LastNGames=0&LeagueID=00&' + \
            'Location=&MeasureType='
url_back = '&Month=0&OpponentTeamID=0&Outcome=&PORound=0&PaceAdjust=N&' + \
           'PerMode=PerGame&Period=0&PlayerExperience=&PlayerPosition=&' + \
           'PlusMinus=N&Rank=N&Season=2016-17&SeasonSegment=&' + \
           'SeasonType=Regular+Season&ShotClockRange=&StarterBench=&TeamID=0&' + \
           'VsConference=&VsDivision=&Weight='
#measure_type = ['Base','Advanced','Misc','Scoring','Opponent','Usage','Defense']
measure_type = 'Base'
address = url_front + measure_type + url_back

# Request the URL, then parse the JSON.
response = requests.get(address)
response.raise_for_status()         # Raise exception if invalid   response. 
data = response.json()              # JSON decoding. 

到目前为止,我已经尝试从博客文章 (here) 和/或本网站上发布的问题 (Python, R) 中复制本质上相似的代码,但我最终得到了相同的结果每次结果 - 代码实际上并没有成功从 URL 中提取任何内容。

由于我是网络抓取的新手,我希望能帮助我解决问题 - 这对于具有客户端渲染的网站 (NBA.com) 是否常见,还是表明我的代码/计算机存在问题?在这两种情况下,是否有常见的解决方法/解决方案?

【问题讨论】:

  • 您是否尝试过在浏览器中访问该网址?它有一条消息说'MeasureType is required'
  • 该链接应该可以在浏览器中使用 - 如果您仍然感兴趣,请尝试this

标签: python web-scraping


【解决方案1】:

如果您在浏览器中访问该链接,您会发现它运行良好。原因是浏览器和requests 具有不同的用户代理标头,并且该站点专门阻止看起来不像来自浏览器的HTTP 请求,因为它们不想被抓取。您可以像这样绕过它:

response = requests.get(address, headers={
    'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:46.0) Gecko/20100101 Firefox/46.0',
})

记住这一点,不要让他们的服务器超载。

【讨论】:

  • 感谢代码/讨论 - 这很有意义。有没有办法告诉哪些网站可能需要 requests 中的其他信息(例如 'User-Agent 或其他一些标头),或者无论如何都提供它们是更好的做法?
  • @chbonfield 反复试验。阻止人们抓取的资源和动机越多,就会有越多的检查,而且它不像在请求中提供信息那么简单。例如,如果请求太快,网站通常会怀疑机器人。最终网站可能需要验证码。
猜你喜欢
  • 2017-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-06
  • 2016-11-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多