如何使用BeautifulSoup提取表格中球员伤病及日期信息?
爬取球员伤病数据的解决方案
核心思路
- 过滤掉带有
COLLAPSE类的空<tr>元素,只保留包含球员数据的有效行 - 从每个有效行中定位第3个
<td>(目标数据固定所在位置) - 提取该
<td>内的伤病名称和日期文本,清理无关字符后整理成目标列表
实现代码(基于BeautifulSoup)
from bs4 import BeautifulSoup # 替换为实际爬取到的HTML内容 html = """ <tbody> <tr> <td> <a href="LINK">Player1</a> </td> <td>Position1</td> <td> <b>Player1 Injury</b> <br> "Date of injury1" </td> <td> <a href="LINK" class="BUTTON"></a> </td> </tr> <tr class="COLLAPSE"></tr> <tr> <td> <a href="LINK">Player2</a> </td> <td>Position2</td> <td> <b>Player2 Injury</b> <br> "Date of injury2" </td> <td> <a href="LINK" class="BUTTON"></a> </td> </tr> <tr class="COLLAPSE"></tr> </tbody> """ soup = BeautifulSoup(html, 'html.parser') # 筛选不含COLLAPSE类的有效tr valid_rows = soup.find_all('tr', class_=lambda c: c != 'COLLAPSE') injury_data = [] for row in valid_rows: # 获取第3个td(索引从0开始,对应第3个位置) target_td = row.find_all('td')[2] # 提取并清理文本:去除空格和多余引号 clean_texts = [t.strip().strip('"') for t in target_td.stripped_strings] injury_data.extend(clean_texts) print(injury_data)
代码说明
class_=lambda c: c != 'COLLAPSE':精准过滤掉无用的折叠行,只保留有数据的行target_td.stripped_strings:自动提取<td>内所有非空文本片段,无需手动处理<br>标签- 文本清理步骤:去除首尾空格和包裹日期的引号,确保结果格式符合要求
运行代码后将输出:
['Player1 Injury', 'Date of injury1', 'Player2 Injury', 'Date of injury2']
内容的提问来源于stack exchange,提问作者Link
相关产品推荐
相关产品推荐

