数据提取(3)
XPath的使用
XPath和XLML类库
- lxml是一款高性能的python HTML/XML解释器,我们可以利用XPath,来快速的定位特定元素以及获取节点信息。
- XPath(XML Path Language)定义:是一门在HTML/XML文档中查找信息的语言,可以用来在HTML/XML文档中对元素和属性进行遍历。
- 学习文档:https://www.w3school.com.cn/xpath/index.asp
认识XML
- XML
- 是一种可扩展标记语言
- 目的:被设计为传输和存储数据,其焦点是数据的内容
- 节点:每个XML的标签称之为节点
- HTML
- 是一种超文本标记语言
- 目的:显示数据以及如何更好显示数据
XPath节点选择
- 工具
- Chrome插件XPath Helper
- 开源XPath表达式编辑工具:XMLQuire(XML格式文件可用)
- Firefox插件 XPath Checker
节点选择语法
- XPath使用路径表达式来提取XML文档中的节点或者节点集。这些路径表达式和在常规的linux电脑文件系统中看到的表达式非常相似。
XPath学习重点
- 使用xpath helper或者是chrome中的copy xpath都是从element中提取的数据,但是爬虫获取的是url对应的响应,往往和element不一样。
- 获取文本
a/text()
获取a下的文本a//text()
获取a下的所有标签的文本//a[text()="下一页"]
选择文本为“下一页”三个字的a标签
- @符号
a/@href
a//ul[@id="detail"]
- //符号
- 在xpath开始的时候表示从当前html中任意位置开始选择
li//a
表示li标签下的任意一个a标签
- 提取https://movie.douban.com/chart网页中电影的名称,图片
//div[@class="indent"]//table//div[@class="pl2"]/a//text()
//div[@class="indent"]//table//a[@class="nbg"]/img/@src
python中lxml库
- 使用入门:
- 导入lxml的etree库
from lxml import etree
- 利用etree.HTML,将字符串转化为Element对象
- Element对象具有xpath的方法
html = etree.HTML(text)
- 导入lxml的etree库
- lxml可以自动修正html对象
lxml使用注意点
- lxml能够修正HTML代码,但是可能会改错了
- 使用etree.tostring()观察修改后的html的样子,根据修改之后的html字符串写xpath
- lxml能够接受bytes和str字符串
- 提取页面数据的思路
- 先分组,取到一个包含分组标签的列表
- 遍历,取其中每一组进行数据的提取,不会造成数据的对应错乱
xpath的包含
//div[contains(@class,'i')]