You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python和BeautifulSoup获取含图标的表格表头?

解决方案

核心思路是按原表格顺序逐个处理每个表头单元格(<th>),这样既保证顺序一致,又能处理图标型表头的title属性,同时避免批量操作的报错。

步骤与代码实现

  1. 模拟浏览器请求获取页面(规避Transfermarkt的基础反爬拦截)
  2. 定位目标表格,遍历每个<th>标签
  3. 对每个<th>优先提取<span>的title属性,无则提取文本内容
import requests
from bs4 import BeautifulSoup

# 模拟浏览器请求头,可替换为你自己的UA
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
}

# 替换为曼联2022赛季数据页的实际URL
target_url = "https://www.transfermarkt.com/manchester-united/spielplan/verein/985/saison_id/2022"
response = requests.get(target_url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')

# 定位目标表格(Transfermarkt公开数据表格常用class为items)
target_table = soup.find('table', class_='items')
if not target_table:
    print("未找到目标数据表格,请检查页面结构是否变化")
    exit()

# 按原表格顺序提取表头
table_headers = []
for header_cell in target_table.find('thead').find_all('th'):
    # 查找带title属性的span标签(对应图标型表头)
    icon_header = header_cell.find('span', title=True)
    if icon_header:
        table_headers.append(icon_header['title'].strip())
    else:
        # 提取普通文本表头并清理空白
        header_text = header_cell.get_text(strip=True)
        table_headers.append(header_text)

# 输出提取结果
print("提取到的表头:")
print(table_headers)

关键说明

  • 顺序一致性:通过遍历<thead>下的每个<th>,完全遵循原表格的表头顺序,不会出现乱序问题。
  • 解决TypeError:每次处理单个<th>时先判断是否存在带title的<span>,避免直接访问不存在元素的属性导致报错。
  • 文本清理:用strip()和get_text(strip=True)处理掉多余的换行、空格,保证表头内容整洁。

注意事项

  • 若页面结构变化(比如表格class变更),需要用浏览器开发者工具重新定位表格的标识(比如class、id)。
  • 若遇到反爬限制,可以尝试在headers中添加Referer字段,或者间隔请求避免被封IP。

内容的提问来源于stack exchange,提问作者Frunzacoding

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 06:10:18