Python 将html表转换为字典而不丢失结构

Python 将html表转换为字典而不丢失结构,python,html,beautifulsoup,html-parsing,Python,Html,Beautifulsoup,Html Parsing,我是python(和编程)新手,第一次使用BeautifulSoup 我正试图找到用html解析表格内容并转换为字典的最佳方法——最好是以最不脆弱的方式 下面是一个我试图解析的HTML示例(我已经为我试图提取的文本输入了键值) 然后我可以在soup.tbody.text字符串上循环,并将其拆分为键值对。但这似乎不是一个好方法,我似乎正在丢失表的结构,将其转换为字符串,然后将其重新构建到字典中 是否有更直接的方法将带有BeautifulSoup(或更合适的东西)的表解析到我可以使用的字典中?方法是

我是python(和编程)新手,第一次使用
BeautifulSoup

我正试图找到用html解析表格内容并转换为字典的最佳方法——最好是以最不脆弱的方式

下面是一个我试图解析的HTML示例(我已经为我试图提取的文本输入了键值)

然后我可以在
soup.tbody.text
字符串上循环,并将其拆分为键值对。但这似乎不是一个好方法,我似乎正在丢失表的结构,将其转换为字符串,然后将其重新构建到字典中


是否有更直接的方法将带有
BeautifulSoup
(或更合适的东西)的表解析到我可以使用的字典中?

方法是迭代表行,并为每行提取第二个和第三个单元格的文本,这些单元格表示未来字典的键和值:

soup = BeautifulSoup(html.text)

result = dict([[item.get_text(strip=True) for item in row.find_all('td')[1:3]]
               for row in soup.select("div.tablename table tr")[1:]])

print result
对于提供的样本数据,它打印:

{u'Key 1': u'Value 1', u'Key 2': u'Value 2', u'Key 3': u'Value 3'}

div.tablename table tr
是一个将匹配
table
下所有
tr
元素的表,该元素具有
div
,并将
class=“tablename”
作为父元素。我们正在对
选择
[1:
)的结果进行切片,以跳过第一个标题行。

感谢实际数据在表的第12行中有一个子标题,然后是另外3行相关数据。@Yunti这是一个很好的时间提及:)抱歉没有及时完成编辑:感谢实际数据在表的第12行内有一个副标题,然后是另外3行相关数据。丢弃第12行副标题的最佳方式是什么。只需对切片[1:12]和[13:16]执行两次“结果”?我稍微修改了代码,将列表理解更改为生成器表达式,因为不需要临时列表。
soup = BeautifulSoup(html.text)

result = dict([[item.get_text(strip=True) for item in row.find_all('td')[1:3]]
               for row in soup.select("div.tablename table tr")[1:]])

print result
{u'Key 1': u'Value 1', u'Key 2': u'Value 2', u'Key 3': u'Value 3'}