用python函数包装html
我希望能够根据div的id对其进行包装。例如,给定以下HTML:用python函数包装html,python,html,parsing,Python,Html,Parsing,我希望能够根据div的id对其进行包装。例如,给定以下HTML: <body> <div id="info"> <div id="a1"> </div> <div id="a2"> <div id="description"> </div> <div id="links">
<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>
<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>
将返回以下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>
<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,但没有发现任何东西能够让我不仅获取特定标记中的所有内容,而且能够附加字符串并轻松编辑文档。如果没有,那么什么是一个很好的方法呢?我推荐
BeautifulSoup
虽然它会带来一些依赖性,但也会带来很多便利。以下代码可以实现包装的目标:
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'))
从美化组导入美化组
#div1将用div2包裹
def包裹(文件,1分区id,2分区id)
池=美化组(文档)
对于pool.findAll('div',attrs={id':div1\u id})中的div:
div.replacetwith(“”+div.prettify()+“”)
返回池。美化()
包装(文件,'a2','wrapped')
你试过BeautifulSoup
吗?是的,BeautifulSoup rocks!我不希望使用BeautifulSoup来实现这一点,因为这只是我正在编写的模块中的一个简单的事情,我不想导入那么大的内容,我甚至不知道如何在BeautifulSoup中实现这一点,但如果真的没有其他方法,我会检查它
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')