【发布时间】:2020-05-26 00:44:40
【问题描述】:
我正在尝试从以下位置抓取一些 NFL 数据:
url = https://www.pro-football-reference.com/years/2019/opp.htm.
我首先尝试使用 pandas 从表中抓取数据。我以前做过,而且总是直截了当。我希望 pandas 返回页面上找到的所有表格的列表。然而,当我跑
dfs = pd.read_html(url)
我只收到了来自网页的前两个表格,Team Defense 和 Team Advanced Defense。
然后我去尝试用 bs4 和 requests 抓取其他表。为了测试,我首先只尝试刮第一个表:
page = requests.get(url)
soup = BeautifulSoup(page.text, 'lxml')
table = soup.find('table', id = 'advanced_defense')
rows = table.find_all('tr')
for tr in rows:
td = tr.find_all('td')
row = [i.text for i in td]
print(row)
然后我可以简单地更改 id,这样我就返回了 Team Defense 和 Team Advanced Defense - 与 pandas 返回的相同的两个表。
但是,当我尝试使用相同的方法抓取页面上的其他表格时,我收到了错误消息。我通过与前两个表相同的方式检查网页获得了id,但无法获得结果。
page = requests.get(url)
soup = BeautifulSoup(page.text, 'lxml')
table = soup.find('table', id = 'passing')
rows = table.find_all('tr')
for tr in rows:
td = tr.find_all('td')
row = [i.text for i in td]
print(row)
当我收到以下错误时,尝试抓取页面上的任何其他表格时,它无法找到 table 的任何内容
AttributeError: 'NoneType' object has no attribute 'find_all'
我觉得很奇怪 pandas 和 bs4 都只能返回 Team Defense 和 Team Advanced Defense 表。
我只打算刮团队防守、传球防守和冲球防守表。
我怎样才能成功地刮掉传球防守和冲球防守表?
【问题讨论】:
标签: python pandas web-scraping beautifulsoup