【发布时间】:2020-06-17 00:13:30
【问题描述】:
我有一些复杂的 HTML 文件,其中列表被错误地拆分,如下例所示。
<ul>
<li>Foo</li>
</ul>
<ul>
<li>Bar</li>
</ul>
<p>Bla bla bla</p>
<ul>
<li>Foo</li>
</ul>
<ul>
<li>Bar</li>
</ul>
<ul>
<li>Baz</li>
</ul>
我需要将每一系列列表组合成一个列表。但是只有连续的列表,所以第一个列表(<p> 之前)不会与第二个列表(<p> 之后)混在一起。
<ul>
<li>Foo</li>
<li>Bar</li>
</ul>
<p>Bla bla bla</p>
<ul>
<li>Foo</li>
<li>Bar</li>
<li>Baz</li>
</ul>
这是我的 Python 代码:
for tag in soup.find_all('ul'):
previous_tag_list = tag.find_previous_sibling(tag.name)
previous_tag = tag.find_previous().find_previous()
if previous_tag_list is not None and previous_tag_list == previous_tag:
for tag1 in tag.find_all('li'):
previous_tag.append(tag1)
tag.decompose()
对于每个<ul>,它会找到一个以前的<ul>,并将两者结合在一起。所以我明白了:
<ul>
<li>Foo</li>
<li>Bar</li>
</ul>
<p>Bla bla bla</p>
<ul>
<li>Foo</li>
<li>Bar</li>
</ul>
<ul>
<li>Baz</li>
</ul>
这不是我想要的。
【问题讨论】:
-
“仅连续列表”是什么意思?您能否编辑问题并添加一个非连续列表示例以及它对您的预期输出有何作用?
-
@JackFleeting 我编辑了问题,希望现在清楚了!
-
我怀疑您的实际代码包含两个以上的
<ul>组,并且每个组之间都有` 标签,对吧?另外,如果这是真的,在第一个
<ul>之前和/或在最后一个<ul>组之后是否有<p>? -
@JackFleeting 是的,实际代码包含多个
<ul>组,这些组之间有很多不同的标签,而不仅仅是<p>!
标签: html python-3.x beautifulsoup