<p> 使用美丽汤从HTML中提取所有内容



我在stackoverflow上没有找到解决方案。 所以我的 HTML 代码段是:

<d1>
<dt class="abc">Test</dt><dd><dl>
<dt>Part1</dt><dd><p>THISISWHATINEED<br /><a href="anyurl" target="">12334</a><br /><a href="anyurl" target="">abcdef</a></p></dd>
<dt>Part2</dt><dd><p>THISISWHATINEED2<br /><a href="anyurl" target="">12334</a><br /><a href="anyurl" target="">abcdef</a></p></dd>
<dt class="abc">Test2</dt><dd><dl>
<dt>Part3</dt><dd><p>THISISWHATINEED3<br /><a href="anyurl" target="">12334</a><br /><a href="anyurl" target="">abcdef</a></p></dd>
<dt>Part4</dt><dd><p>THISISWHATINEED4<br /><a href="anyurl" target="">12334</a><br /><a href="anyurl" target="">abcdef</a></p></dd>

那么我如何获得适合例如<dt class="abc">Test</dt><dd><dl>的所有<p>。我尝试使用d1.find_all("dt"),但随后我错过了<p>。我真的不知道如何得到"孩子"。最好的办法是遍历<dt>,然后在其中迭代例如"测试"(第一部分)的<p>。但是我该怎么做呢?你们有什么提示或想法吗?

我已经尝试过的:

d1 = soup.find_all("dl")
for child in d1.children:
print(child)

还有很多其他的东西,这些东西已经不在我脑海中了。

另一种效果很好的方法:

for child in d1.children:
if child.string is not None:
continue
if child.string is None:
xx= len(child.find_all("p"))

谢谢!

问候 缺口

尝试使用相邻的兄弟姐妹(+)CSS选择器,它将选择一个紧跟在另一个元素之后的元素。

要使用 CSS 选择器,请使用.select()方法而不是find_all()

在您的示例中:

for tag in soup.select(".abc +dd dt +dd p"):
print(tag.contents[0])
  • .abc是类名,因此abc替换为实际类
  • 由于<p>标记中有多个属性,因此使用.contents[0]获取所需的元素

输出:

THISISWHATINEED1
THISISWHATINEED2
THISISWHATINEED3
THISISWHATINEED4

最新更新