0

我作为初学者在 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 实现这一点。

4

1 回答 1

0

我认为你想包围tail文本,我会选择更好地处理它们。以下脚本搜索element包含tail文本的任何内容,创建一个新<div>标签(选择您的标签)并将其插入其中。它使用正则表达式来检查文本是否是价格,这样会跳过Ships from and sold by Amazon.comor末尾的文本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>
于 2013-10-18T07:02:37.387 回答