我希望能够根据它的id包装div。例如,给出以下HTML:
<body>
<div id="info">
<div id="a1">
</div>
<div id="a2">
<div id="description">
</div>
<div id="links">
<a href="http://example.com">link</a>
</div>
</div>
</div>
</body>
我想编写一个Python函数,它接受一个文档,一个id和一个选择器。并将id
中的给定document
包含在div
中,其中包含类或标识selector
。例如,假设上面的HTML位于变量doc
wrap(doc,'#a2','#wrapped')
将返回以下HTML:
<body>
<div id="info">
<div id="a1">
</div>
<div id="wrapped">
<div id="a2">
<div id="description">
</div>
<div id="links">
<a href="http://example.com">link</a>
</div>
</div>
</div>
</div>
</body>
我查看了一些XML解析器和Python HTMLParser,但是我没有找到任何能让我不仅能够获取特定标签内的所有内容,而且还能够附加字符串并轻松编辑文档的功能。如果一个不存在,对此有什么好处?
答案 0 :(得分:2)
from BeautifulSoup import BeautifulSoup
#div1 is to be wrapped with div2
def wrap(doc,div1_id,div2_id)
pool = BeautifulSoup(doc)
for div in pool.findAll('div', attrs={'id':div1_id}):
div.replaceWith('<div id='+div2_id+'>' + div.prettify() + '</div>' )
return pool.prettify()
wrap(doc,'a2','wrapped')
答案 1 :(得分:1)
我推荐BeautifulSoup
虽然它会带来一些依赖性但也很方便。以下代码可以实现wrap
:
from bs4 import BeautifulSoup
data = '''<body>
<div id="info">
<div id="a1">
</div>
<div id="a2">
<div id="description">
</div>
<div id="links">
<a href="http://example.com">link</a>
</div>
</div>
</div>
</body>'''
soup = BeautifulSoup(data)
div = soup.find('div', attrs={'id': 'a2'})
div.wrap(soup.new_tag('div', id='wrapper'))
然后print soup.prettify()
我们可以看到结果:
<html>
<body>
<div id="info">
<div id="a1">
</div>
<div id="wrapper">
<div id="a2">
<div id="description">
</div>
<div id="links">
<a href="http://example.com">
link
</a>
</div>
</div>
</div>
</div>
</body>
</html>