仅使用BeautifulSoup在Python中获取元素及其父元素
我想用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))