[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-