我作为初学者在Python2.7工作。我想解析和修改一些html文件。为此,我正在使用美丽的汤,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来实现这一点。
我想你想包围tail
文本,我会选择 lxml 更好的那个美丽的汤来处理它们。以下脚本搜索包含tail
文本的任何element
,创建一个新的<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>