使用BeautifulSoup解析HTML表格td标签在for循环中存入字典的方法
错误原因
- 你的推导式中循环对象是
<tr>标签,没有拆分单个<tr>下的两个<td>元素,直接把整行的文本同时作为键和值,所以出现键值相同的问题 - 缺少空字符串替换为
'None'的逻辑
正确实现
首先封装公共的文本清理方法,避免重复写冗余逻辑:
def clean_text(raw): res = raw.replace('\u2002', '').replace('\n', '').strip() return res if res else 'None'
常规循环写法(可读性更高,推荐)
results = {} for tr in table_data: tds = tr.find_all('td') # 过滤掉td数量不足2的异常行,避免索引报错 if len(tds) >= 2: k = clean_text(tds[0].text) v = clean_text(tds[1].text) results[k] = v
字典推导式写法(和上面逻辑完全等效)
results = { clean_text(tr.find_all('td')[0].text): clean_text(tr.find_all('td')[1].text) for tr in table_data if len(tr.find_all('td')) >= 2 }
注意:因为字典的键具有唯一性,如果表格第一列存在重复内容,后出现的行的值会覆盖先出现的行的值,属于正常特性。
内容的提问来源于stack exchange,提问作者Simon Palmer
相关产品推荐
相关产品推荐

