如何使用Beautiful Soup将指定标签提取为列表?
解决Beautiful Soup提取标签列表的问题
你之前的代码问题在于,直接获取了整个<span class="entry-tags-inner">标签的文本内容,所以得到的是所有标签文本拼接后的字符串,而非单个标签组成的列表。以下是两种正确的实现方式:
方法一:直接定位目标<a>标签
直接找到所有带有entry-tag类的<a>标签,提取每个标签的文本:
from bs4 import BeautifulSoup html = '''<p class="entry-tags"> <span class="entry-tags-inner"> <a href="#" class="entry-tag entry-tag-10165">Tag1</a> <a href="#" class="entry-tag entry-tag-29555">Tag2</a> <a href="#" class="entry-tag entry-tag-10169">Tag3</a> <a href="#" class="entry-tag entry-tag-24312">Tag4</a> <a href="#" class="entry-tag entry-tag-23324">Tag5</a> </span> </p>''' soup = BeautifulSoup(html, 'html.parser') # 定位所有class为entry-tag的a标签 tag_elements = soup.find_all('a', class_='entry-tag') # 提取每个标签的文本,strip=True去除多余空白 tag_list = [tag.get_text(strip=True) for tag in tag_elements] print(tag_list)
输出结果:
['Tag1', 'Tag2', 'Tag3', 'Tag4', 'Tag5']
方法二:先找到父级<span>再遍历子标签
如果需要先定位到entry-tags-inner这个span,再遍历其下的<a>标签:
from bs4 import BeautifulSoup html = '''<p class="entry-tags"> <span class="entry-tags-inner"> <a href="#" class="entry-tag entry-tag-10165">Tag1</a> <a href="#" class="entry-tag entry-tag-29555">Tag2</a> <a href="#" class="entry-tag entry-tag-10169">Tag3</a> <a href="#" class="entry-tag entry-tag-24312">Tag4</a> <a href="#" class="entry-tag entry-tag-23324">Tag5</a> </span> </p>''' soup = BeautifulSoup(html, 'html.parser') # 找到目标span标签(因为只有一个,用find比find_all更高效) tags_container = soup.find('span', class_='entry-tags-inner') # 遍历span下的所有a标签,提取文本 tag_list = [a.get_text(strip=True) for a in tags_container.find_all('a')] print(tag_list)
输出结果和方法一一致。
注:
get_text(strip=True)会自动去除文本前后的换行、空格等空白字符,避免HTML缩进带来的多余空格。
内容的提问来源于stack exchange,提问作者Alexander Varovsky
相关产品推荐
相关产品推荐

