只使用Python中的BeautifulSoup获取元素及其父元素

时间:2014-07-03 16:02:57

标签: python html beautifulsoup

我想使用BeautifulSoupfind_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 个答案:

答案 0 :(得分: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))