LXML解析库使用的是Xpath语法:

XPath 是一门语言

XPath可以在XML文档中查找信息

XPath支持HTML

XPath通过元素和属性进行导航

XPath可以用来提取信息

XPath比正则表达式厉害

XPath比正则表达式简单

lxml使用方法:

from lxml import etree
text = '''
<div>
<ul>
<li class="item-0"><a href="link1.html">first item</a></li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-inactive"><a href="link3.html">third item</a></li>
<li class="item-1"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a>
</ul>
</div>
''' html = etree.HTML(text) #使用etree.HTML初始化
result = etree.tostring(html) #将初始化的HTML转化成string
print result

首先我们使用 lxml 的 etree 库,然后利用 etree.HTML 初始化,然后我们将其打印出来。

其中,这里体现了 lxml 的一个非常实用的功能就是自动修正 html 代码,大家应该注意到了,最后一个 li 标签,其实我把尾标签删掉了,是不闭合的。不过,lxml 因为继承了 libxml2 的特性,具有自动修正 HTML 代码的功能。

所以输出结果是这样的

<html><body><div>
<ul>
<li class="item-0"><a href="link1.html">first item</a></li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-inactive"><a href="link3.html">third item</a></li>
<li class="item-1"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a>
</li></ul>
</div>
</body></html>
#不仅补全了 li 标签,还添加了 body,html 标签。

如何使用XPATH:

安装lxml库

from lxml import etree

Selector = etree.HTML(网页源代码)

Selector.xpath(一段神奇的符号)

XPath与HTML结构

获取网页元素的Xpath

应用XPath提取内容

案例1:

html = '''<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>测试-常规用法</title>
</head>
<body>
<div id="content">
<ul id="useful">
<li>这是第一条信息</li>
<li>这是第二条信息</li>
<li>这是第三条信息</li>
</ul>
<ul id="useless">
<li>不需要的信息1</li>
<li>不需要的信息2</li>
<li>不需要的信息3</li>
</ul>
<div id="url">
<a href="http://jikexueyuan.com">极客学院</a>
<a href="http://jikexueyuan.com/course/" title="极客学院课程库">点我打开课程库</a>
</div>
</div>
</body>
</html>
'''
selector = etree.HTML(html)
#提取文本 提取文本内容:/text()
content= selector.xpath('//ul[@id="useless"]/li/text()') #提取id属性为useless下面li标签的文本信息
content1 = selector.xpath('//ul/li/text()') #提取所有li标签的文本信息
content2 = selector.xpath('//div[@id="content"]/ul[@id="useful"]/li/text()') #提取id属性为useful下面li标签的文本信息
for each in content2:
print each #提取属性
link = selector.xpath('//a/@href') #提取属性内容: /@xxxx
for each in link:
print each
title = selector.xpath('//a/@title') #提取属性内容: /@xxxx
print title[0]

xpath基本语法

//定位根节点

/往下层寻找

提取文本内容:/text()

提取属性内容: /@xxxx

===================

xpath的特殊用法

1.以相同的字符开头

2.标签套标签

案例1

html1 = '''
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>测试-特殊用法</title>
</head>
<body>
<div id="test-1">需要的内容1</div>
<div id="test-2">需要的内容2</div>
<div id="testfault">需要的内容3</div>
</body>
</html>
''' selector = etree.HTML(html1)
content = selector.xpath('//div[starts-with(@id,"test")]/text()')
for each in content:
print each

案例2:

html2 = '''
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
<div id="test3">
我左青龙,
<span id="tiger">
右白虎,
<ul>上朱雀,
<li>下玄武。</li>
</ul>老牛在当中,
</span>龙头在胸口。
</div>
</body>
</html>
'''
selector1=etree.HTML(html2)
content1 = selector1.xpath('//div[@id="test3"]/text()')
for each in content1:
print each data = selector1.xpath('//div[@id="test3"]')[0]
info = data.xpath('string(.)')
print info

最新文章

  1. linux安装Mac的默认Monaco字体
  2. python 内建函数setattr() getattr()
  3. Struts2常用标签
  4. a few changes of Android 5.0
  5. List, Set, Map是否继承自Collection接口?
  6. RegEx正则表达式学习笔记
  7. POJ 2155 Matrix (二维线段树入门,成段更新,单点查询 / 二维树状数组,区间更新,单点查询)
  8. 【原创】海量数据处理问题(一) ---- 外排,堆排,K查找的应用
  9. Java使用poi对Execl简单操作_总结
  10. 对 Xcode 菜单选项的详细探索(转)
  11. js 联系电话验证实现
  12. [Python Study Notes]匿名函数
  13. Django网站制作根目录,巧用404,可访问根目录任意网页
  14. yii 1.x 添加 rules 验证url数组
  15. jackson 流式API
  16. grep 匹配打印的上下几行
  17. 洛谷 P4151 [WC2011]最大XOR和路径 解题报告
  18. js 获取验证码计时器
  19. shiro工作过程
  20. Angular7 Drag and Drop

热门文章

  1. Watering Grass UVA - 10382
  2. vux, vue上拉加载更多
  3. php正则的使用
  4. MySQL使用的常见问题
  5. js将url转换二维码
  6. hbase安装部署
  7. 成功解决You are using pip version 9.0.1, however version 9.0.3 is available. You should consider upgra
  8. 485. Max Consecutive Ones最大连续1的个数
  9. Mybatis中,当插入数据后,返回最新主键id的几种方法,及具体用法
  10. 【转】MVC中code first方式开发,数据库的生成与更新(Ef6)