我想使用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>
请问如何解决这个问题?
答案 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))