仅使用BeautifulSoup在Python中获取元素及其父元素

0 投票
1 回答
2337 浏览
提问于 2025-04-18 12:01

我想用BeautifulSoup里的find_all函数来获取所有的<li>标签,同时也想获取它们的父标签。

<div name="div1">
    <li>Test 1</li>
    <li>Test 2</li>
</div>

如果我用下面的代码:

tags = soup.find_all("li")
print tags[0].parent

这段代码会输出:

<div name="div1">
    <li>Test 1</li>
    <li>Test 2</li>
</div>

因为父标签里包含了这两个<li>标签。

我期待的结果是:

<div name="div1">
    <li>Test 1</li>
</div>

请问该如何解决这个问题呢?

1 个回答

2

你可以通过为每个列表元素复制父元素,并把这个元素放在里面,来实现你想要的效果:

from bs4 import BeautifulSoup

txt = """<div name="div1">
        <li>Test 1</li>
        <li>Test 2</li>
        </div>"""

def clone(soup, tag):
   newtag = soup.new_tag(tag.name)
   for attr in tag.attrs:
      newtag[attr] = tag[attr]
   return newtag

soup = BeautifulSoup(txt)
tags = soup.find_all("li")
for tag in tags:
   print tag.wrap(clone(soup, tag.parent))

撰写回答