【问题标题】:Scraping json webpage抓取json网页
【发布时间】:2018-04-02 02:19:12
【问题描述】:

我对网络抓取非常陌生,在从 nba.com 抓取一些 NBA 球员数据时遇到了一些麻烦。我首先尝试使用 bs4 抓取页面,但遇到了一个问题,经过一些研究,我认为这是由于我阅读的文章中的“XHR”造成的。我能够找到 json 格式数据的网址,但我的 python 程序似乎陷入困境,并且从不加载数据。再次,我在网络抓取方面很新,但我想看看我是否在这里偏离轨道......有什么建议吗?谢谢! (代码如下)

import requests
import json

url = "http://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=2017-18&SeasonSegment=&SeasonType=Regular+Season&ShotClockRange=&StarterBench=&TeamID=0&VsConference=&VsDivision=&Weight="

resp = requests.get(url=url)
data = json.loads(resp.text)
print(data)

【问题讨论】:

  • 为什么不去图书馆寻求帮助呢? github.com/seemethere/nba_py 或者至少看看他们是怎么做到的?
  • 还没找到。。谢谢看看!

标签: python json web-scraping python-requests


【解决方案1】:

试一试。它将根据我定义的标题从该页面生成所有类别。顺便说一句,您最初的尝试没有得到响应,因为网页在您的请求中期待User-Agent,以确保请求不是来自机器人,而是来自任何真正的浏览器。但是,我伪造了它并找到了响应。

import requests

url = "http://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=2017-18&SeasonSegment=&SeasonType=Regular+Season&ShotClockRange=&StarterBench=&TeamID=0&VsConference=&VsDivision=&Weight="
resp = requests.get(url,headers={'User-Agent':'Mozilla/5.0'})
data = resp.json()

storage = data['resultSets']
for elem in storage:
    all_list = elem['rowSet']

    for item in all_list:
        Player_Id = item[0]
        Player_name = item[1]
        Team_Id = item[2]
        Team_abbr = item[3]
        print("Player_Id: {} Player_name: {} Team_Id: {} Team_abbr: {}".format(
            Player_Id,Player_name,Team_Id,Team_abbr))

【讨论】:

  • 我用这个 url 尝试了你的方法:"enciclovida.mx/explora-por-region/especies-por-grupo?utf8=\xe2\x9c\x93&grupo_id=Plantas&region_id=&parent_id=&pagina=&nombre=" 而且我总是得到 500,即使使用标题,任何关于如何适应它的想法?
  • mmm 我尝试设置一个 region_id 并且我得到了结果,但是由于这些是在页面中出现的 (pagina=) 我只得到前 10 个,它们应该是 > 500 页;我看到篮球示例在同一页面中包含所有数据。有什么提示吗?
【解决方案2】:

刚刚意识到这是因为用户代理标头不同...一旦添加它们就可以工作

【讨论】:

  • 也可以直接使用r.json() 如图here
猜你喜欢
  • 1970-01-01
  • 2018-12-13
  • 2019-11-10
  • 2021-08-29
  • 1970-01-01
  • 2020-06-18
  • 2019-06-25
相关资源
最近更新 更多