如何使用Python从多特蒙德赛事HTML页面提取“TSV SCHOTT Mainz”?
多特蒙德赛事页面对手名称提取方案
你当前代码的核心问题有两个:
- 错误地尝试从
<img>标签提取文本内容,但对手名称实际存在于img的alt属性中 - 页面元素的选择器(表格、行的class)可能和当前页面结构不匹配
以下是修正后的可运行代码:
import requests from bs4 import BeautifulSoup url = "https://www.bvb.de/Spiele/Alle-Spiele" response = requests.get(url) if response.status_code == 200: soup = BeautifulSoup(response.text, "html.parser") # 定位赛事数据表格 game_table = soup.find("table", class_="statistics statistics--matches") if game_table: # 遍历每一行赛事记录 for row in game_table.find_all("tr", class_="statistics__row"): # 找到存放对手信息的单元格 opponent_cell = row.find("td", class_="statistics__cell--opponent") if opponent_cell: # 从img标签的alt属性提取对手名称 opponent_logo = opponent_cell.find("img") if opponent_logo: opponent_name = opponent_logo.get("alt", "").strip() if opponent_name == "TSV SCHOTT Mainz": print(f"成功提取目标对手:{opponent_name}")
关键说明:
- 选择器适配:原代码用的
statistics statistics-matchday已不再是当前页面表格的class,改用实际生效的statistics statistics--matches - 属性提取:
<img>标签的文本内容为空,对手名称是通过alt属性存储的,所以要用.get("alt")方法获取 - 定位逻辑优化:先锁定对手信息所在的单元格,再从中提取图片元素,能有效避免无关元素干扰
如果后续页面结构变动,你可以通过浏览器F12开发者工具查看目标元素的最新属性:右键点击目标对手名称,选择「检查」,在Elements面板中确认节点的层级、class等信息,再调整代码中的选择器即可。
内容的提问来源于stack exchange,提问作者Theresa_S
相关产品推荐
相关产品推荐

