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')
但是只能输出:奥迪阿萨德,第一个之后的内容都不能输出,请问该如何解决?
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>
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。