学习爬虫第五天 xpath

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 代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值