【发布时间】:2026-01-03 15:00:01
【问题描述】:
我想遍历一些 html 并将数据存储到字典中。每次迭代都以:
<h1 class="docDisplay" id="docTitle">
我有以下代码:
html = '<html><body><h1 class="docDisplay" id="docTitle">Data1</h1><p>other data<\p><h1 class="docDisplay" id="docTitle">Data2</h1><p>other data2<\p></html>'
soup=BeautifulSoup(html)
newdoc = soup.find('h1', id="docTitle")
title = newdoc.findNext(text=True)
data = title.findAllNext('p',text=True)
data_dict = {}
data_dict[title] = {'data': data}
print data_dict
现在,输出是
{u'Data1': {'data': [u'other data<\\p>', u'Data2', u'other data2<\\p>']}}
我希望输出是:
{u'Data1': {'data': [u'other data<\\p>']}, u'Data2': {'data': [u'other data2<\\p>']}}
到达新的 h1 标签后,我不知道如何重新开始。有什么想法吗?
【问题讨论】:
-
你没有正确关闭你的。你也不要关闭你的身体标签。
-
我认为这就是他使用 BeautifulSoup 的原因。
-
您是否正在尝试构建一个字典,将标题名称映射到每个标题下的段落?如果是这种情况,您会遇到所有
<p>标记都是同级的问题,因此没有好的方法可以编写类似“在<div>中找到<h1>标记之后的<p>标记” .您可能必须遍历<body>标记的子标签,跟踪您何时遇到标题和段落并对您的字典进行适当的更新。 -
@Josh Rosen:我明白你在说什么。当我使用 findNextAll 命令时,我得到所有 p 标记内容,因为它们是同级的。我不确定您所说的“遍历 标记的子项,跟踪您何时遇到标题和段落并对字典进行适当的更新”是什么意思。你能详细说明一下吗?
标签: python tags beautifulsoup loops