使用Beautiful Soup提取赛事HTML信息遇阻,寻求技术协助
问题修正方案
你的代码主要存在三个核心问题:
select方法用法错误:该方法仅接受CSS选择器字符串,不能像find那样拆分参数传参- 目标元素定位错误:日期、时间是
span.venuetime标签的自定义属性,并非div的class;场地对应的class名你写错了(原HTML里不存在match_stadium) - 属性提取逻辑缺失:你要的日期、时间是标签的属性值,不是标签本身的文本内容
修正后的代码如下:
import requests from bs4 import BeautifulSoup url = "https://fbref.com/en/matches/e62685d4/Manchester-United-Leeds-United-August-14-2021-Premier-League" response = requests.get(url) soup = BeautifulSoup(response.text, "html.parser") scorebox = soup.find("div", class_="scorebox_meta") # 提取日期:从venuetime类的span标签中获取data-venue-date属性 venuetime_span = scorebox.find("span", class_="venuetime") date = venuetime_span["data-venue-date"] # 提取时间:从同一个span标签中获取data-venue-time属性 time = venuetime_span["data-venue-time"] # 提取场地:匹配包含"Venue"的div,再获取其后的small标签文本 venue = scorebox.find("div", string=lambda text: "Venue" in text.strip()).find_next("small").text.strip() print("Date:", date) print("Time:", time) print("Venue:", venue)
关键说明:
- 定位到
venuetime类的span标签后,直接通过字典索引方式获取自定义属性值(如['data-venue-date']),如果担心属性不存在导致报错,可改用get方法,比如venuetime_span.get("data-venue-date", "未知日期") - 场地提取用lambda表达式匹配包含"Venue"的div,再找相邻的small标签,比硬写DOM结构更健壮,适配页面小范围结构变更
内容的提问来源于stack exchange,提问作者ewolf
相关产品推荐
相关产品推荐

