使用Python bs4解析HTML时如何获取a标签文本解决属性错误
报错原因
soup.find_all('a') 返回的是存储了所有匹配到的<a>标签对象的结果列表,列表类型本身没有.text属性,直接调用就会抛出属性错误。只有单个标签元素对象才支持通过.text属性获取内部文本。
另外你给出的示例HTML里第一个a标签的闭合标签误写为</;/a>,属于语法错误,不过html.parser自带容错机制,会自动修正这个问题,不会干扰文本提取结果。
正确提取方式
遍历find_all返回的结果列表,对每个单独的a标签对象调用.text提取文本即可,修正后的可运行代码如下:
from bs4 import BeautifulSoup with open('basic.html', 'r') as f: contents = f.read() soup = BeautifulSoup(contents, "html.parser") # 遍历所有匹配到的a标签,逐个提取文本存入列表 a_content_list = [tag.text for tag in soup.find_all('a')] print(a_content_list)
运行上述代码会输出你需要的结果:
['Face book', 'Google']
如果需要把所有a标签的文本合并为单个字符串,可以直接对列表做join处理:
merged_text = '、'.join(a_content_list) # 得到结果:'Face book、Google'
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

