开发者社区> 问答> 正文

python提取标签中的内容

screenshot

import codecs
#coding=utf-8
from lxml import etree
f=codecs.open("1.html","r","utf-8")
content=f.read()
f.close()
tree=etree.HTML(content)
node=tree.xpath("//div[@class='content']")[0]
print node.text.encoding('gbk')

但是只能输出:奥迪阿萨德,第一个之后的内容都不能输出,请问该如何解决?

展开
收起
杨冬芳 2016-06-15 10:56:11 2452 0
1 条回答
写回答
取消 提交回答
  • IT从业

    lxml 的element.text返回的是这个元素第一个节点的内容,所以会出现这样的问题。可以用getText这个辅助方法来解决:

    # require lxml
    # version: python2
    def getText(elem):
        rc = []
        for node in elem.itertext():
            rc.append(node.strip())
        return ''.join(rc)
    

    这里可以直接修改最后一行即可:

    import codecs
    #coding=utf-8
    from lxml import etree
    
    def getText(elem):
        rc = []
        for node in elem.itertext():
            rc.append(node.strip())
        return ''.join(rc)
    
    f=codecs.open("1.html","r","utf-8")
    content=f.read()
    f.close()
    tree=etree.HTML(content)
    # 返回的是lxml.etree._Element,可以直接作为getText参数来调用。
    node=tree.xpath("//div[@class='content']")[0]
    print getText(node).encoding('gbk')
    

    这里的getText只是简单的实现,比如下面的xml文本会打印abdc,应该可以达到你的要求。

    <div class="content">
        a<em>b <em>d</em></em>c
    </div>
    
    2019-07-17 19:38:54
    赞同 展开评论 打赏
问答分类:
问答地址:
相关产品:
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载