【问题标题】:scrape NBA table without id or class没有 id 或 class 刮 NBA 表
【发布时间】:2022-01-14 05:09:10
【问题描述】:

我正在尝试用 BeautifulSoup 抓取这个 NBA 历史上的领先者数据:https://www.nba.com/stats/alltime-leaders/?SeasonType=Regular%20Season&PerMode=Totals&StatCategory=PTS

我怎样才能刮掉所有玩家?我试过了,但没有用。

players = soup.find_all("td", class_="player")

我也尝试按表刮,但它没有 id 或类:

enter image description here

【问题讨论】:

  • 表格数据在<nba-stat-table>标签下,动态加载(通过JS)。
  • 谢谢。我是编程新手。我想这意味着我不能废弃它?

标签: python web-scraping beautifulsoup


【解决方案1】:

数据是从您可以在浏览器的网络选项卡中找到的另一个端点动态加载的。调用该端点会给出一个 json 响应,您可以轻松地重建表:

import requests
import pandas as pd

r = requests.get('https://stats.nba.com/stats/leagueLeaders?ActiveFlag=No&LeagueID=00&PerMode=Totals&Scope=S&Season=All+Time&SeasonType=Regular+Season&StatCategory=PTS').json()
df = pd.DataFrame(r['resultSet']['rowSet'], columns = r['resultSet']['headers'])
print(df)

【讨论】:

  • 但是您如何通过解析原始页面自动发现该端点?您必须手动检查
  • 我只是打开了网络选项卡 然后刷新了网页 并过滤了 XHR 上的网络流量并查看了请求。这个端点构造是一个查询字符串并且变化缓慢。这些参数看起来和我多年来看到的一样。
  • 好的,您无法使用 BeautifulSoup/selenium/scrapy 自动发现 URL。
  • 看来这次是我深入研究熊猫的时候了@QHarr。
猜你喜欢
  • 2016-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-27
  • 2014-01-08
  • 2021-12-28
相关资源
最近更新 更多