[TOC]
1. 什么是lxml
lxml是干什么的?简单的说来,lxml是帮助我们解析HTML、XML文件,快速定位,搜索、获取特定内容的Python库。我们知道,对于纯文本的HTML文件的查找可以使用正则表达式
、BeautifulSoup
等完成。lxml也是对网页内容解析的一个库。
那么为什么要用lxml呢?据听说他比较快。我没有用来做过大项目,对解析速度理解不是很深刻。我用lxml只是因为它似乎比BeautifulSoup好用。
2. 初次使用
- 安装
sudo pip3 install lxml
- 初次使用
# 导入lxml
from lxml import etree
# html字符串
html_str = """
<html>
<head>
<title>demo</title>
</head>
<body>
<p>1111111</p>
</body>
</html>
"""
# 利用html_str创建一个节点树对象
html = etree.HTML(html_str)
type(html) # 输出结果为:lxml.etree._Element
- 首次解析HTML
不用理会下面代码中出现的新的方法和各种解析的技巧。先看一下lxml如何快速方便的解析html.
# 我们现在要获得上面的html文件中的p标签的内容
p_str = html.xpath('//body/p/text()') # 返回结果为一个列表:['1111111']
上面的例子,给出一个lxml如何解析HTML文件的实例。后文中众多的知识点,只不过是讲解更多的xpath解析方法技巧。
3. xpath
我们一直再讲lxml,这里突然出现xpath是干什么的?lxml的主要功能是解析HTML,他是利用什么语法来解析HTML的呢?就是利用xpath,因此,我们需要了解如何使用xpath。
xpath将html文档看做一个有众多的节点按照特定级别组织的节点树,对于其中内容的解析,又三种主要的措施:
- 标签定位
- 序列定位
- 轴定位
很抱歉,我们又引入了新的概念。但现在我们解释这些概念是不明智的,还是先看一下如何使用。
3.2 标签定位
为了说明xpath各种定位语法,我们下面利用如下的HTML来完成讲解。
from lxml import etree
html_str = """
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-