如何利用bs4简化HTML表格转指定JSON字典的实现?
更简洁的BeautifulSoup实现方案
当然有更简洁的写法啦!你当前的循环逻辑完全没问题,但可以利用Python的字典推导式,把嵌套的循环逻辑压缩成更紧凑且可读性强的代码,同时完全保留原有功能。
优化后的代码
result = { row['class'][0]: {cell['class'][0]: cell.text for cell in row.select('td')} for row in table.select('tr') }
代码说明
这个写法本质上是把你原来的两层嵌套循环转换成了嵌套字典推导式:
- 外层推导式遍历每一行
<tr>,用行的第一个class值作为顶层键 - 内层推导式遍历当前行的所有
<td>单元格,用单元格的第一个class值作为子字典的键,单元格文本作为对应值
可选的健壮性优化
如果担心某些行或单元格可能没有class属性(避免KeyError),可以稍微调整代码,用get()方法做容错处理:
result = { row.get('class', ['unknown_row'])[0]: { cell.get('class', ['unknown_key'])[0]: cell.text for cell in row.select('td') } for row in table.select('tr') }
这样即便遇到缺少class的元素,代码也不会报错,而是用预设的默认值替代。
内容的提问来源于stack exchange,提问作者Kirk Broadhurst
相关产品推荐
相关产品推荐

