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

BeautifulSoup4文档示例无法运行,如何修改代码获取预期结果?

嘿,作为BS4新手碰到这种文档代码和实际运行不匹配的情况确实挺挠头的!我猜你说的是文档里用自定义函数筛选标签的那个例子,对吧?

首先,你提到的.has_attr()方法确实已经被BS4弃用了,现在官方推荐用更贴合Python习惯的方式来检查标签是否包含某个属性。

假设你的初始代码A是类似这样的(对应文档里的旧示例):

from bs4 import BeautifulSoup

def has_target_attr(tag):
    return tag.has_attr('target')

# 后续调用find_all(has_target_attr)之类的逻辑

要得到预期结果B,只需要把.has_attr()的写法替换成检查属性是否在标签的attrs字典中就行,修改后的代码如下:

from bs4 import BeautifulSoup

def has_target_attr(tag):
    # 替换已弃用的has_attr方法,用Python原生的字典存在性检查
    return 'target' in tag.attrs

# 后续调用逻辑不变
soup = BeautifulSoup(你的HTML内容, 'html.parser')
results = soup.find_all(has_target_attr)

如果是更复杂的逻辑,比如同时检查多个属性的存在/不存在,思路也是一样的:

def filter_tags(tag):
    # 检查有class属性但没有id属性
    return 'class' in tag.attrs and 'id' not in tag.attrs

这种写法和原来的.has_attr()功能完全一致,而且是BS4现在推荐的用法,运行后就能得到文档里展示的预期结果啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:26:48