05 Xpath和lxml模块

2020年05月16日 80点热度 0人点赞 0条评论

5.1 xpath介绍

5.1.1 基本概念

XPath(XML Path Language)是一款高性能的HTML/XML解析器,最初设计是用来搜寻XML文档的,它也同样适用于HTML文档的搜索。我们在做爬虫的时候,可以用Xpath来抽取节点的信息,快速帮我们定位元素和属性进行遍历。

然而lxml是在python中的一个模块,这个模块可以将HTML文本转换成XML对象,和对象执行xpath的功能。

5.1.2 HTML与XML

HTML(HyperText Markup Language)-- 超文本标记语言,用来在网页上显示数据。

XML(EXtensible Markup Language)-- 可扩展标记语言,被设计为传输和存储数据。

XML的节点关系

节点概念:每个XML的标签我们称之为节点

<bookstore>
<book>
<title lang='eng'>YY Books</title>
<author>YenYoong</author>
<year>2020</year>
<price>1202<price>
</book>
</bookstore>
  • 父(Parent)book元素是title、author、year、price元素的父
  • 子(Children)title、author、year、price都是book的元素的子
  • 同胞(Sibling)title、author、year、price都是同胞
  • 先辈(Ancestor)title元素的先辈是book元素和bookstore元素

5.2 基本的使用

5.2.1 Xpath工具的安装
  • Chrome 插件Xpath Helper
  • Firefox 插件 Xpath Checker

我这里使用Chrome演示安装的方法:

  1. 首先需要先下载xpath扩展程序:https://yybloger.com/Down/xpath-helper.rar
  2. 接着在Chrome浏览器输入:chrome://extensions/
  3. 直接把chrome_Xpath_v2.0.2.crx托动至该扩展程序页面,或是点击加载扩展程序。
  4. 安装完成后,重启浏览器
  5. 点击右上角的xpath按钮或是开启xpath的快捷键:ctrl + shift + x
5.2.2 节点选择语法方法

Xpath使用路径表达式来获取HTML/XML文档中的节点集。这些路径表达式和我们在电脑文件管理系统中看到的表达式非超相似。

表达式 描述
/ 从根节点选取
// 从匹配选择的当前节点选择⽂档中的 节点,⽽不考虑它们的位置
. 选取当前节点
.. 选取当前节点的⽗节点
@ 选取

查找某个特定的节点或者包含某个指定值的节点

路径表达式 结果
/bookstore/book[1] 选取属于 bookstore ⼦元素的第⼀个 book 元素。
/bookstore/book[last()] 选取属于 bookstore ⼦元素的最后⼀ 个 book 元素。
/bookstore/book[last()-1] 选取属于 bookstore ⼦元素的倒数第 ⼆个 book 元素。
/bookstore/book[position()<3] 选取最前⾯的两个属于 bookstore 元 素的⼦元素的 book 元素。
//title[@lang] 选取所有拥有名为 lang 的属性的 title 元素。
//title[@lang='eng'] 选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。
/bookstore/book[price>35.00] 选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须⼤ 于 35.00。
选择未知节点

Xpath通配符可用来选取未知的XML元素。

通配符 描述
* 匹配任何元素节点。
@* 匹配任何属性节点。
node() 匹配任何类型的节点。

列出了一些路径表达式,以及这些表达式的结果

路径表达式 结果
/bookstore/* 选取 bookstore 元素的所有⼦元素。
//* 选取⽂档中的所有元素。
html/node()/meta/@* 选择html下⾯任意节点下的meta节点 的所有属性
//title[@*] 选取所有带有属性的 title 元素。

XPath更多语法:https://msdn.microsoft.com/zh-cn/library/ms256039(v=vs.80).aspx

5.2.3 模块的使用

在Python中,我们安装lxml库来使用XPath技术

lxml是一个HTML/XML的解析器,主要的功能是如何解析和提取HTML/XML数据。

利用etree.HTML,将字符串转化为Element对象。

lxml python 官方文档:http://lxml.de/index.html

可以使用pip安装:pip install lxml (或是通过wheel方式安装)

lxml 可以自动修正HTML代码

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

在python里使用lxml模块的方法:

from lxml import etree

我们来看看 etree 能做些什么呢?

  • 第一个是将html字符串转化为element对象
  • 第二个是element对象转换为字符串或者二进制类型

YenYoong☕

当你能梦的时候就不要放弃梦~😎

文章评论