1. Xpath
1-1. 什么是xpath?
Xpath是⼀⻔在HTML/XML⽂档中查找信息的语⾔,可⽤来在HTML/XML⽂档中对元素和属性进⾏遍历
文档: xpath介绍
1-2. xml与HTML数据格式
XML:
- 描述:可扩展标记语言
- 设计目标: 被设计为传输和存储数据,其焦点是数据的内容
HTML:
- 描述: 超文本标记语言
- 设计目标: 显示数据以及如何更好的显示
2-3. xml的节点关系
概念: 每个XML的标签我们都称之为节点。
示例:
<book>
<title>hello world</title>
<author>juran</author>
<year>2019</year>
<book>
2. Xpath用法:
2-1. 节点选择语法:
定义: XPath使⽤路径表达式来选取XML⽂档中的接待或者节点集。这些路径表达式和我们在常规的电脑⽂件系统中看到的表达式⾮常相似。
表达式 | 描述 |
---|---|
/ | 从根节点选取 |
// | 从匹配选择的当前节点选择文档中的节点,而不考虑他们的位置 |
. | 选取当前节点 |
… | 选取当前节点的父节点 |
@ | 选取 |
2-2. 查找某个特定的节点或者包含某个指定的值的节点:
路径表达式 | 结果 |
---|---|
/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。 |
//*[contains(text(), “xx”)] | 根据文本进行模糊匹配 |
//*[contains(@class, “xx”)] | 根据class进行模糊匹配(class可根据需要选择其他) |
2-3. 选择未知节点:
XPath 通配符可⽤来选取未知的 XML 元素。
通配符 | 描述 |
---|---|
* | 匹配任何元素节点 |
@* | 匹配任何属性节点 |
node() | 匹配任何类型的节点 |
常见路径表达式,及表达式结果:
路径表达式 | 结果 |
---|---|
/bookstore/* | 选取 bookstore 元素的所有⼦元素。 |
//* | 选取⽂档中的所有元素。 |
html/node()/meta/@* | 选择html下⾯任意节点下的meta节点的所有属性 |
//title[@*] | 选取所有带有属性的 title 元素。 |
xpath的更多语法: 更多语法
2.4 运算符
运算符 | 参考 | 注释 |
---|---|---|
and | //*[contains(text(),“xxx”) and contains(@class,“xxx”)] | 判断所有的文本包含xxx,class属性包含xxx的元素 |
not() | //input[@name=‘identity’ and not(contains(@class,‘a’))] | 表示匹配出name为identity并且class的值中不包含a的input节点 |
or | //*[@type=‘email’ or @name=‘your-name’] | 判断所有元素中,如果出现type位email或者name为your-name的就返回节点 |
3. lxml 库
3-1. 特点
- lxml 是 ⼀个HTML/XML的解析器,主要的功能是如何解析和提取HTML/XML 数据。
- 利⽤etree.HTML,将字符串转化为Element对象
- lxml python 官⽅⽂档:lxml官方文档
- 可使⽤ pip 安装:pip install lxml (或通过wheel⽅式安装)
- lxml 可以⾃动修正 html 代码