python提取标签中的内容


抓取了一个网页,网页中一部分内容如下:
网页数据
我使用如下代码:


 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')

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

python HTML lxml

owl1991 10 years, 10 months ago

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>

慕丶染汐 answered 10 years, 10 months ago

Your Answer