BeautifulSoup爬取pro-football-reference站点时错误获取第二张表格问题
问题原因及解决办法
问题原因
你遇到的问题核心原因是目标站点的首个表格「Week 10 injury report」被放在了HTML注释块中:
- 用requests直接拉取的页面原始源码里,这个表格的完整代码被
<!--和-->包裹,属于注释内容 - BeautifulSoup默认不会解析注释内的HTML标签为正常DOM节点,所以
findAll('table')返回的列表里根本不包含这个被注释的表格,你取索引0的元素自然就是未被注释的第二个表格「Team Injuries」
解决方法
你需要先提取页面中的所有注释内容,筛选出包含目标表格的注释块,再单独解析这块内容即可,示例代码如下:
import requests from bs4 import BeautifulSoup, Comment url = "https://www.pro-football-reference.com/teams/buf/2021_injuries.htm" r = requests.get(url) soup = BeautifulSoup(r.content, features="lxml") # 提取所有注释内容 comments = soup.find_all(string=lambda text: isinstance(text, Comment)) target_table_html = None for c in comments: # 筛选包含Week 10 injury report表格的注释 if 'Week 10 injury report' in c: target_table_html = c break # 解析注释内的表格 if target_table_html: table_soup = BeautifulSoup(target_table_html, features="lxml") table = table_soup.find('table') for player in table.findAll("tr"): print([i.getText() for i in player.findAll("td")])
内容的提问来源于stack exchange,提问作者earningjoker430
相关产品推荐
相关产品推荐

