首页 文章

使用BeautifulSoup或lxml解析和修改html . 使用一些html标记包围文本,该标记直接位于<body>标记下

提问于
浏览
0

我作为初学者在Python2.7工作 . 我想解析和修改一些html文件 . 为此,我使用Beautiful Soup和lxml也是一种选择 . 现在的问题是我可以通过修改html来包含带有一些html标签的文本 . 文本直接在'body'标签下,所以什么文本直接在body标签下我想修改html,以便我可以在我想要的标签下获取文本 . 所以我可以解析它并轻松找出这个文本的位置 .

<html><body>
<b>List Price:</b>
<strike>$150.00</strike>
<b>Price</b> $117.80
<b>You Save:</b> $32.20(21%)
<font size="-1" color="#009900">In Stock</font>
<a href="/gp/aw/help/id=sss/ref=aw_d_sss_shoes">Free Shipping</a>
Ships from and sold by Amazon.com
Gift-wrap available.
</body></html>

所以这里在这个例子中我想用一些用户html标签包围文本'$ 117.80'和'$ 32.20' . 如何使用Beautifulsoup或lxml实现这一目标 .

1 回答

  • 0

    我想你想要包围 tail 文本,我会选择lxml更好beautifulsoup来处理它们 . 以下脚本搜索包含 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>
    <b>Price</b><div> $117.80</div>
    <b>You Save:</b><div> $32.20(21%)</div>
    <font size="-1" color="#009900">In Stock</font>
    <a href="/gp/aw/help/id=sss/ref=aw_d_sss_shoes">Free Shipping</a>
    Ships from and sold by Amazon.com
    Gift-wrap available.
    </body></html>

相关问题