【问题标题】:How to scrape these player ratings from Squawka如何从 Squawka 中获取这些玩家评分
【发布时间】:2019-01-05 08:55:02
【问题描述】:

我想从 Squawka 抓取玩家评分,如果我只是做一个 URL 请求并使用 BeautifulSoup 解析 Python 中的内容,我看不到评分或玩家名称出现在任何地方。我应该如何进行?具体网址见:

http://www2.squawka.com/football-player-rankings#performance-score#player-stats#english-premier-league|season-2017/2018#all-teams#all-player-positions#16#40#0#0#90#11/08/2017#13/05/2018#season#1#all-matches#total

【问题讨论】:

    标签: web-scraping


    【解决方案1】:

    数据没有嵌入到 html 中,而是从另一个 JSON api http://www2.squawka.com/wp-content/themes/squawka_web/leaderboard_process-v2.php 中检索到的,带有一些 url 参数:

    http://www2.squawka.com/wp-content/themes/squawka_web/leaderboard_process-v2.php?type=Player%20Stats&filter=2&league=819&team=0,31,299,301,302,33,169,34,309,315,36,37,38,39,43,44,46,47,323,48,49&played=All%20matches&position=All%20Player%20Positions&agestart=16&ageend=40&noofmatch=0&seasonstart=11/08/2017&seasonend=13/05/2018&by=season&timestart=0&timeend=90&is_home=1&showtype=total

    获取玩家全名和总数,使用 &

    curl -s 'http://www2.squawka.com/wp-content/themes/squawka_web/leaderboard_process-v2.php?type=Player%20Stats&filter=2&league=819&team=0,31,299,301,302,33,169,34,309,315,36,37,38,39,43,44,46,47,323,48,49&played=All%20matches&position=All%20Player%20Positions&agestart=16&ageend=40&noofmatch=0&seasonstart=11/08/2017&seasonend=13/05/2018&by=season&timestart=0&timeend=90&is_home=1&showtype=total' | \
         jq  '[ 
                .result | .. | {total: .data?.total?, name: .info?.full_name?} | select(.total != null) 
              ] | sort_by(.total) | reverse'
    

    【讨论】:

    • 我想知道我 --- 作为一个非常缺乏经验的网络爬虫者 --- 自己是如何解决这个问题的,您采取了哪些步骤来解决这个问题?
    • 在浏览器上打开开发控制台,转到网络选项卡,刷新页面。查看主页的 html 正文,如果您的数据不存在,则可能是附加请求,在这种情况下查找 iframe,如果没有,则它是来自 JS 的 API 调用。进一步查看网络选项卡中的请求,直到找到具有数据的请求
    猜你喜欢
    • 2015-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-11
    • 2021-03-08
    • 1970-01-01
    • 2013-03-04
    相关资源
    最近更新 更多