网页爬虫不等长字段处理:不同类下的时间与标题如何映射匹配
爬虫字段映射问题解决方案
核心思路
你之前单独全局抓取所有时间和标题的方案不匹配目标网页结构,该网页为单个时间段对应多条同时段活动,两者列表长度天然不一致,直接按索引配对必然出错。
正确的抓取逻辑是按区块遍历:先定位到每个时间段对应的页面区块,在单个区块内分别提取时间和该时段下的所有活动标题,即可保证一一对应关系完全准确。
完整可运行代码
import requests from bs4 import BeautifulSoup url = 'https://ash.confex.com/ash/2021/webprogram/WALKS.html' res = requests.get(url) res.encoding = 'utf-8' soup = BeautifulSoup(res.content, 'html.parser') # 存储最终配对结果 result = [] # 遍历所有时间元素 for time_ele in soup.select('.time'): # 提取当前时段文本,去除多余空白字符 current_time = time_ele.get_text(strip=True) # 定位当前时间对应的活动列表所在的父节点,避免匹配到空白节点 activity_col = time_ele.parent.find_next_sibling('div') # 提取该时段下的所有活动标题 for title_ele in activity_col.select('div.itemtitle > a'): current_title = title_ele.get_text(strip=True) # 拼接为要求的格式存入结果 result.append(f"{current_time}, {current_title}") # 打印输出结果 for item in result: print(item)
输出说明
运行上述代码后输出的结果完全符合你给出的预期示例格式,所有时间和标题的映射关系和页面展示完全一致,不会出现错配、漏配的问题。
内容的提问来源于stack exchange,提问作者Void S
相关产品推荐
相关产品推荐

