我作为初学者在Python2.7工作。我想解析和修改一些html文件。为此,我使用Beautiful Soup和lxml也是一种选择。现在的问题是我可以通过修改html来包含带有一些html标签的文本。文本直接在'body'标签下,所以什么文本都直接在body标签下我想修改html,以便我可以在我想要的标签下获取文本。所以我可以解析它并轻松找到这个文本的位置。
<html><body>
<b>List Price:</b>
<strike>$150.00</strike><br />
<b>Price</b>
$117.80<br />
<b>You Save:</b>
$32.20(21%)<br />
<font size="-1" color="#009900">In Stock</font>
<br />
<a href="/gp/aw/help/id=sss/ref=aw_d_sss_shoes">Free Shipping</a>
<br/>
Ships from and sold by Amazon.com<br />
Gift-wrap available.<br /></body></html>
所以这里在这个例子中我想用一些用户html标签包围文本'$ 117.80'和'$ 32.20'。我怎样才能通过Beautifulsoup或lxml实现这一目标。
答案 0 :(得分:0)
我认为您想要围绕tail
文字,我会选择lxml更好beautifulsoup来处理它们。以下脚本搜索包含element
文本的任何tail
,创建新的<div>
标记(选择您的标记)并将其插入其中。它使用正则表达式检查文本是否有价格,这样就会跳过Ships from and sold by Amazon.com
或Gift-wrap available.
末尾的文字:
from lxml import etree
import re
tree = etree.parse('htmlfile')
root = tree.getroot()
for elem in root.iter('*'):
if elem.tail is not None and elem.tail.strip() and re.search('\$\d+', elem.tail):
e = etree.Element('div')
e.text = elem.tail
elem.tail = ''
elem.addnext(e)
print(etree.tostring(root))
它产生:
<html><body>
<b>List Price:</b>
<strike>$150.00</strike><br/>
<b>Price</b><div>
$117.80</div><br/>
<b>You Save:</b><div>
$32.20(21%)</div><br/>
<font size="-1" color="#009900">In Stock</font>
<br/>
<a href="/gp/aw/help/id=sss/ref=aw_d_sss_shoes">Free Shipping</a>
<br/>
Ships from and sold by Amazon.com<br/>
Gift-wrap available.<br/></body></html>