【发布时间】:2020-06-01 22:43:33
【问题描述】:
我在使用 BeautifulSoup 从 www.basketball-reference.com 刮取数据时遇到了问题。我之前在 Bballreference 上使用过 BeautifulSoup,所以我对正在发生的事情感到有些困惑(当然我是一个非常大的菜鸟,所以请多多包涵)。
我正试图从https://www.basketball-reference.com/leagues/NBA_2020.html 中获取球队赛季统计数据,并且从一开始就遇到了麻烦:
from bs4 import BeautifulSoup
import requests
web_response = requests.get('https://www.basketball-reference.com/leagues/NBA_2020.html').text
soup = BeautifulSoup(web_response, 'lxml')
table = soup.find('table', id='team-stats-per_game')
print(table)
这表明即使我在检查网页时可以清楚地找到该标签,也未能成功找到有问题的表。好吧...到目前为止没什么大不了的(通常这些错误都在我的最后)所以我只是打印出整个汤:
soup = BeautifulSoup(web_response, 'lxml')
print(soup)
我将其复制并粘贴到https://codebeautify.org/htmlviewer/。为了获得比从终端更好的视野,我发现它看起来不像我期望的那样。基本上元标签很好,但其他所有东西似乎都失去了它的开始和结束标签,只是把我的汤变成了真正的汤......
再一次,没什么大不了的(我仍然很确定这是我正在做的事情),所以我从一个简单的博客站点获取 html,打印它,然后将其粘贴到 codebeautify 中,你瞧,它看起来很正常。现在我怀疑篮球参考方面正在发生一些事情,这掩盖了我什至抓取 html 的能力。
我的问题是这样的;这里到底发生了什么?我假设有 80% 的机会仍然是我,但 20% 的人目前还不确定。有人能指出我做错了什么或如何获取 html 吗?
【问题讨论】:
-
这是因为 html 内容是动态创建的,bs4 无法解析。一种解决方案是使用无头浏览器或直接跳转到 Selenium。
标签: python html parsing web-scraping beautifulsoup