使用 BeautifulSoup 或 lxml 解析和修改 html。用一些直接位于标签下方的 html 标签包围文本<body>



我作为初学者在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.comGift-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>

最新更新