如何在Python爬虫中将循环提取的事件标签分组到单个列表索引中
解决方案:合并每个事件的标签为单个列表元素
没问题,这个需求很常见,咱们稍微调整下代码逻辑就能实现你想要的效果~
问题根源
你当前的代码是遍历到每个标签<span>就直接把文本添加到列表里,所以每个标签都是独立的列表元素。而我们需要以每个事件(也就是每个card-body对应的区块)为单位,先收集该事件下的所有标签,再合并成一个字符串后加入列表。
修改后的代码
import requests from bs4 import BeautifulSoup URL = "https://aiml.events/" page = requests.get(URL) soup = BeautifulSoup(page.content, 'lxml') # Scrape Event Tags event_tags_list = [] event_tag_div = soup.find_all('div', class_ = 'card-body') for event_div in event_tag_div: # 临时列表,存储当前事件的所有标签 current_event_tags = [] event_span = event_div.find_all('span', class_ = 'badge badge-light badge-pill') for tag in event_span: # 用strip()去除标签文本前后可能的空白字符 current_event_tags.append(tag.text.strip()) # 将当前事件的所有标签合并为一个逗号分隔的字符串 merged_tags = ', '.join(current_event_tags) # 可选:跳过没有标签的事件,避免列表出现空字符串 if merged_tags: event_tags_list.append(merged_tags) # 验证结果 print(event_tags_list)
关键逻辑说明
- 按事件分组收集标签:在遍历每个事件区块
event_div时,先创建临时列表current_event_tags,专门存储这个事件下的所有标签文本。 - 合并标签为字符串:用Python的
str.join()方法,把临时列表里的标签文本用,(逗号加空格)连接成一个完整的字符串。 - 过滤空元素:添加判断条件,只有当合并后的字符串不为空时才加入最终列表,避免出现无意义的空元素(这一步是可选的,根据你的需求调整)。
这样处理后,event_tags_list里的每个元素就对应一个事件的所有标签集合,完全符合你期望的格式啦!
内容的提问来源于stack exchange,提问作者Raspberry Lemon
相关产品推荐
相关产品推荐

