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

Python爬取足球网站<a>标签href属性遇空值及报错问题求助

问题分析与修正

核心错误点

  1. 变量名不匹配:读取页面内容存入page变量,但初始化BeautifulSoup时误用了未定义的html变量,导致解析无效内容,后续所有操作都基于错误的解析结果。
  2. ResultSet操作错误:find_all()返回的是ResultSet(类列表集合),不能直接调用.get()方法,必须遍历集合中的单个Tag元素再操作。
  3. 属性存在性判断错误:用'href' in link判断属性是否存在是错误的——这是检查字符串href是否在Tag的文本内容里,而非判断标签是否有href属性,会过滤掉所有有效标签,导致列表为空。
  4. 索引访问的前提错误:用link['href']索引访问时,若标签本身无href属性会直接报错,需先确保标签包含该属性,或用.get('href')方法(不存在时返回None,避免报错)。

修正后的代码

第一步:正确解析页面

from bs4 import BeautifulSoup

with open("premier_league/page_2.html", encoding='utf-8') as f:
    page = f.read()
parsed_page = BeautifulSoup(page, "html.parser")  # 修正变量名,使用读取到的page内容

第二步:正确提取href属性

方式1:兼容所有标签(自动过滤无href的标签)

href_list = [link.get('href') for link in parsed_page.find_all("a") if link.get('href')]
  • 用.get('href')替代直接索引,避免无属性时报错;
  • 用if link.get('href')过滤掉返回None的无效项。

方式2:直接筛选带href属性的标签

href_list = [link['href'] for link in parsed_page.find_all("a", href=True)]

方式3:筛选特定关键词的链接

如果需要提取包含特定内容的链接(比如赛事相关链接),可添加过滤条件:

target_hrefs = [link['href'] for link in parsed_page.find_all("a", href=True) if 'match' in link['href']]

对应问题的修正说明

内容的提问来源于stack exchange,提问作者KIZ-MAN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 18:12:37