网页数据解析问题:如何为无对应dd的dt项保留空值?
解决dt/dd不匹配的解析问题
没问题,这事儿好办!针对你遇到的部分dt没有对应dd的情况,我们可以用Python的BeautifulSoup库来精准处理,确保每个dt都能对应到值(没有的话就留空)。
核心思路
遍历所有的dt标签,对每个dt,专门查找它紧随其后的dd标签——如果找到就提取文本,找不到就赋值为空字符串,最后把名称和对应值整理成字典方便使用。
完整代码示例
from bs4 import BeautifulSoup # 你的待解析内容 content = """ <div class="movie_middle"> <dl> <dt>Genres:</dt> <dd>Action, Adventure</dd> <dt>Resolution:</dt> <dt>Release Date:</dt> <dd>2023-10-01</dd> <dt>Director:</dt> </dl> </div>""" # 解析HTML soup = BeautifulSoup(content, 'html.parser') dl_tag = soup.find('dl') # 存储结果的字典 result = {} # 遍历所有dt标签 for dt in dl_tag.find_all('dt'): # 获取当前dt的文本(去掉多余空格,可选去除末尾冒号) name = dt.get_text(strip=True).rstrip(':') # 查找当前dt后面紧邻的第一个dd标签 dd = dt.find_next_sibling('dd') # 如果找到dd就取文本,否则留空 value = dd.get_text(strip=True) if dd else '' result[name] = value print(result)
代码细节说明
dt.find_next_sibling('dd'):这个方法会精准跳过dt后面的换行、空格等无效节点,直接定位第一个dd标签,避免误判。rstrip(':'):可选操作,把dt文本末尾的冒号去掉,让字典的key更整洁(比如把"Genres:"变成"Genres")。- 最终输出的字典里,每个dt对应的key都会有值,没有对应dd的就会是
''(空字符串)。
比如上面示例代码的输出会是:
{'Genres': 'Action, Adventure', 'Resolution': '', 'Release Date': '2023-10-01', 'Director': ''}
这样就完美解决了你要保留空值的需求啦!
内容的提问来源于stack exchange,提问作者SIM
相关产品推荐
相关产品推荐

