我正试图使用以下代码从该网站上获取“每场比赛的球队统计数据”表:
from urllib.request import urlopen as uo
from bs4 import BeautifulSoup as BS
import pandas as pd
url = 'https://www.basketball-reference.com/leagues/NBA_2020.html'
html = uo(url)
soup = BS(html, 'html.parser')
soup.findAll('tr')
headers = [th.getText() for th in soup.findAll('tr')]
headers = headers[1:]
print(headers)
rows = soup.findAll('tr')[1:]
team_stats = [[td.getText() for td in rows[i].findAll('td')]
for i in range(len(rows))]
stats = pd.DataFrame(team_stats, columns=headers)
但它返回以下错误:
AssertionError: 71 columns passed, passed data had 212 columns
问题是数据隐藏在HTML的注释部分中。要提取的表在浏览器中用Javascript呈现。使用requests或urllib请求页面只会生成原始HTML
因此,请注意,如果使用BeautifulSoup搜索要查找的适当标记,则必须使用“查看页面源代码”检查页面的源代码,而不是使用“检查元素”检查呈现页面的源代码
试试这个:
说明:您首先需要通过简单地在节之前拆分原始HTML来查找已注释的节。将节提取为文本,转换为soup,然后解析
相关问题 更多 >
编程相关推荐