Python BeautifulSoup如何提取带data-autid属性的a标签文本内容
带自定义data属性的a标签文本提取方案
原有代码的失效原因
之前编写的self.article_title = item.select_one('a', data_autid='article-url').text.strip()无法匹配到目标元素,核心存在两处逻辑问题:
select_one方法的第二个入参实际是解析器配置类参数,并不支持以键值对形式传入属性匹配规则,这类筛选逻辑在这里完全不会被识别- 把DOM中原生的连字符属性
data-autid替换成了下划线形式的data_autid,即使传参逻辑正确,也和页面实际的属性命名对不上
可直接落地的有效实现
- 方案1:通过CSS选择器直接匹配属性,是配合
select/select_one方法最稳妥的写法
对应代码:
注意:和普通id、class属性可以用self.article_title = item.select_one('a[data-autid="article-url"]').text.strip()#id值、.class值简写不同,带data前缀的自定义属性没有简写语法,必须使用标签[属性名="属性值"]的完整匹配格式,属性名保持网页上的原样书写即可,不需要把连字符替换成下划线。 - 方案2:通过
find方法做精确属性匹配,对自定义属性的兼容性同样良好
对应代码:self.article_title = item.find('a', attrs={'data-autid': 'article-url'}).text.strip()
容错优化
如果遇到页面结构偶发变动、目标元素不存在的场景,可以增加判空逻辑,避免抛出空对象调用属性的错误:
target_elem = item.select_one('a[data-autid="article-url"]') self.article_title = target_elem.text.strip() if target_elem else ""
内容的提问来源于stack exchange,提问作者Niklas Klotz
相关产品推荐
相关产品推荐

