如何用Python和BeautifulSoup获取含图标的表格表头?
解决方案
核心思路是按原表格顺序逐个处理每个表头单元格(<th>),这样既保证顺序一致,又能处理图标型表头的title属性,同时避免批量操作的报错。
步骤与代码实现
- 模拟浏览器请求获取页面(规避Transfermarkt的基础反爬拦截)
- 定位目标表格,遍历每个
<th>标签 - 对每个
<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
相关产品推荐
相关产品推荐

