原文链接:https://www.cnblogs.com/yoyoketang/p/9661273.html
element和elementtree参考:https://blog.csdn.net/hellocsz/article/details/79780654
lxml.etree英文使用说明:https://lxml.de/tutorial.html

lxml安装

使用pip安装lxml库

$ pip install lxml

pip show lxml查看版本号

$ pip show lxml

html解析

etree.HTML方法把html的文本内容解析成html对象,并对HTML文本进行自动修正。
打印html内容,可以用etree.tostring方法,encoding="utf-8"参数可以正常输出html里面的中文内容。pretty_print=True是以标准格式输出

# coding:utf-8from lxml import etreehtmldemo = '''
<meta charset="UTF-8"> <!-- for HTML5 -->
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<html><head><title>yoyo ketang</title></head>
<body>
<b><!--Hey, this in comment!--></b>
<p class="title"><b>yoyoketang</b></p>
<p class="yoyo">这里是我的微信公众号:yoyoketang
<a href="http://www.cnblogs.com/yoyoketang/tag/fiddler/" class="sister" id="link1">fiddler教程</a>,
<a href="http://www.cnblogs.com/yoyoketang/tag/python/" class="sister" id="link2">python笔记</a>,
<a href="http://www.cnblogs.com/yoyoketang/tag/selenium/" class="sister" id="link3">selenium文档</a>;
快来关注吧!</p>
<p class="story">...</p>
'''# etree.HTML解析html内容
demo = etree.HTML(htmldemo)
# 打印解析内容str
t = etree.tostring(demo, encoding="utf-8", pretty_print=True)
print(t.decode("utf-8"))

运行结果

<html><head><meta charset="UTF-8"/> <!-- for HTML5 -->
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>yoyo ketang</title>
</head><body>
<b><!--Hey, this in comment!--></b>
<p class="title"><b>yoyoketang</b></p>
<p class="yoyo">这里是我的微信公众号:yoyoketang
<a href="http://www.cnblogs.com/yoyoketang/tag/fiddler/" class="sister" id="link1">fiddler教程</a>,
<a href="http://www.cnblogs.com/yoyoketang/tag/python/" class="sister" id="link2">python笔记</a>,
<a href="http://www.cnblogs.com/yoyoketang/tag/selenium/" class="sister" id="link3">selenium文档</a>;
快来关注吧!</p>
<p class="story">...</p>
</body>
</html>

解析 XML 字符串

网页下载下来以后是个字符串的形式,使用etree.fromstring(str)构造一个 etree._ElementTree对象,使用 etree.tostring(t)返回一个字符串

>>> xml_string = '<root><foo id="foo-id" class="foo zoo">Foo</foo><bar>中文</bar><baz></baz></root>'
>>> root = etree.fromstring(xml_string.encode('utf-8')) # 最好传 byte string>>> etree.tostring(root)
#默认返回的是 byte string
b'<root>root content<foo id="foo-id" class="foo zoo">Foo</foo><bar>Bar</bar><baz/></root>'>>> print(etree.tostring(root, pretty_print=True).decode('utf-8'))
#decode 一下变成 unicode
<root><foo id="foo-id" class="foo zoo">Foo</foo><bar>Bar</bar><baz/> # 注意这里没有子节点的 baz 节点被变成了自闭和的标签
</root>>>> type(root)
<class 'lxml.etree._Element'>#可以看出 tostring 返回的是一个_Element类型的对象,也就是整个 xml 树的根节点

xpath使用案例

使用htnl解析器,最终是想获取html上的某些元素属性和text文本内容,接下来看下,用最少的代码,简单高效的找出想要的内容。
比如要获取“这里是我的微信公众号:yoyoketang”

# coding:utf-8from lxml import etreehtmldemo = '''
复制上面的html内容
'''# etree.HTML解析html内容
demo = etree.HTML(htmldemo)nodes = demo.xpath('//p[@class="yoyo"]')
# 获取文本
t = nodes[0].text
print(t)

运行结果:

这里是我的微信公众号:yoyoketang

从代码量上看,简单的三行代码就能找到想要的内容了,比之前的beautifulsoup框架要简单高效的多

nodes是xpath定位获取到的一个list对象,会找出所有符合条件的元素对象。可以用for 循环查看详情

#coding:utf-8
from lxml import etreehtmldemo = '''
复制上面的html内容
'''# etree.HTML解析html内容
demo = etree.HTML(htmldemo)nodes = demo.xpath('//p[@class="yoyo"]')print(nodes)  # list对象for i in nodes:# 打印定位到的内容print(etree.tostring(i, encoding="utf-8", pretty_print=True).decode("utf-8"))# 元素属性,字典格式print(i.attrib)

运行结果

[<Element p at 0x2bcd388>]
<p class="yoyo">这里是我的微信公众号:yoyoketang
<a href="http://www.cnblogs.com/yoyoketang/tag/fiddler/" class="sister" id="link1">fiddler教程</a>,
<a href="http://www.cnblogs.com/yoyoketang/tag/python/" class="sister" id="link2">python笔记</a>,
<a href="http://www.cnblogs.com/yoyoketang/tag/selenium/" class="sister" id="link3">selenium文档</a>;
快来关注吧!</p>{'class': 'yoyo'}

二次查找

通过xpath定位语法//p[@class=“yoyo”]定位到的是class="yoyo"这个元素以及它的所有子节点,如果想定位其中一个子节点,可以二次定位,继续xpath查找,如

nodes = demo.xpath('//p[@class="yoyo"]')t1 = nodes[0].xpath('//a[@id="link2"]')
print(t1[0].text)

运行结果

python笔记

python之lxml.etree解析HTML相关推荐

  1. lxml读取本地html文件,如何使用Python和lxml来解析本地html文件?

    我在python中使用本地html文件,我正在尝试使用lxml来解析文件.由于某种原因,我无法正确加载文件,我不确定这是否与我的本地计算机上没有设置http服务器,etree用法或其他内容有关. 这是 ...

  2. python etree详解_使用lxml.etree解析python alexa结果

    您遇到两个挑战: >使用名称空间的XML >两个共享相同名称空间前缀的名称空间 具有两个不同名称空间重用前缀的XML文档 您会看到" aws:"前缀,但是它用于两个不同 ...

  3. python爬虫基础(二)~工具包: 下载包requests、urllib和解析包BeautifulSoup(bs4)、lxml.etree.xpath

    目录 1. html下载工具包 1.1 urllib工具包 1.1.1 urllib错误一 1.2 Requests工具包 1.2.1 requests错误一 2. html解析工具包 2.1 Bea ...

  4. xpath修复html错误,【python】xpath解析html文件报错:lxml.etree.XPathEvalError: Invalid expression...

    使用xpath解析一个简单的html文件,想获取href属性的值: html = etree.parse('test.html',etree.HTMLParser()) print(html.xpat ...

  5. 【Python爬虫学习笔记4】结合Xpath与lxml库解析数据

    在之前的学习中了解了如何使用爬虫向目标服务器发送请求并获取响应,而此后便是要对响应进行处理,这里的处理在爬虫中通常指的是数据解析,即将相应内容数据化以方便我们进行有效数据的提取.在此过程中,有许多解析 ...

  6. python中用lxml解析html

    lxml,是python中用来处理xml和html的功能最丰富和易用的库.详情见:http://lxml.de/index.html. 在windows下安装lxml,可以用easy_install工 ...

  7. Python 中 xpath 语法 与 lxml 库解析 HTML/XML 和 CSS Selector

    The lxml.etree Tutorial :https://lxml.de/tutorial.html python3 解析 xml:https://www.cnblogs.com/deadwo ...

  8. python 归纳 (九)_html解析-lxml

    # -*- coding: utf-8 -*- """ 学习lxml解析网页程序功能: 解析 360影视 电影排行榜中的信息 https://www.360kan.com ...

  9. python lxml模块解析html_用lxml解析HTML

    先演示一段获取页面链接代码示例: #coding=utf-8 from lxml import etree html = ''' 友情链接查询 - 站长工具 Top News World News o ...

  10. python lxml解析html,当使用lxml.html解析html时,等同于InnerHTML

    我正在编写一个使用lxml.html解析网页的脚本.在我的时间里,我做了一些漂亮的工作,但是现在由于它的速度,我正在尝试使用lxml. 我想知道库中最明智的方法是做与Javascript的InnerH ...

最新文章

  1. 别只顾着写代码,学会这 25 条比涨工资都重要,你信不?
  2. UA SIE545 优化理论基础4 对偶理论简介4 求解对偶问题的割平面算法
  3. CAS权属线粗细修改
  4. java压缩_Java压缩
  5. c# webclient 保存会话信息_winform项目——仿QQ即时通讯程序16:会话列表的存储
  6. [转] MongoDB shell 操作 (查询)
  7. pp助手苹果版本_PP助手、百度助手相继下线,越狱时代宣告落幕,你曾越狱过吗?...
  8. TD-LTE原理及其关键技术介绍
  9. 保密计算机和移动存储介质台账,银行计算机和移动存储介质保密管理办法
  10. 室内定位算法_基于RFID技术的室内定位方法简述
  11. mac上装windows10
  12. 深澜系统服务器架构,S7510E-X结合深澜服务器做Portal无感知认证终端不定时掉线经验案例...
  13. Python入门学习笔记第五章——if条件句~~~
  14. 常用遥感卫星数据汇总
  15. 18-三目运算符和逗号表达式
  16. JavaWeb-Cookie、Session
  17. EF 计算时期/时间差
  18. 2015年手机应用程序市场预测
  19. ECharts 3.0底层zrender 3.x源码分析1-总体架构
  20. R语言绘制社会网络图

热门文章

  1. 前端上传文件后端到服务器,前端js上传文件 到后端接收文件
  2. 如何按页进行PDF文档拆分
  3. Hadoop环境搭建学习(1)
  4. [python高德]行政区查询、调用wbe服务api获取省、市、区经纬度信息
  5. nodejs下载图片
  6. Python调用腾讯API进行营业执照核验
  7. UG NX 12 草图环境中使用鼠标的说明
  8. OpenSSH 搭建 SFTP 服务器
  9. c语言程序书写时每行必须有行号,C语言阶段复习一.doc
  10. SCM供应链管理系统解决方案:实现供应可视化、管理信息化,成本可控化