XPath学习:(XML Path Language)
XML:Extensible Markup Language (可扩展标记语言),被设计为传输和存储数据,其焦点是数据的内容
HTML:HyperText Markup Language(超文本标记语言),
XPath 是一门在 XML 文档中查找信息的语言。XPath 用于在 XML 文档中通过元素和属性进行导航。
1.0 XPath 术语:
在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点。XML 文档是被作为节点树来对待的。树的根被称为文档节点或者根节点。
2.0 节点选择语法:
表达式 | 描述 |
nodename | 选取此节点的所有节点 |
/ | 从根节点选取 |
// | 从匹配选择的当前节点选择文档的节点,而不考虑它们的位置 |
. | 选取当前节点 |
.. | 选取当前节点的父节点 |
@ | 选取属性 |
@[] | 定位 |
3.0 xpath的学习重点:
-使用xpath helper 或者是chrome中的copy xpath都是从element中提取的数据。
但是爬虫获取的url对应的响应,往往和elements 不一样
---获取文本
'a/text()' 获取a的文本
‘a//text()’ 获取a 的所有文本
'//a[text()="下一页"]',所选文本为“下一页” 三个字的a标签。
---获取属性:@符号:
'a/@href'
'//ul[@id="detail-list"]'
--- 在xpath开始的时候表示当前html中任意位置开始选择
‘li//a’ 表示的是li下任何一个标签
4.0 lxml库:
使用入门:
- 导入lxml的etree库
from lxml import etree
- 利用etree.HTML,将字符串转化为Element对象
- Element对象具有xpath的方法
html = etree.HTML(text) html.xpath("")
- lxml可以自动修正html代码
5.0 lxml使用注意点
---lxml 能够修正HTML代码,但是可能会改错了
使用etree.tostring观察修改之后的html的样子,根据修改之后的html的字符串写xpath
---lxml 能够接受bytes和str的字符串
---提取页面数据的思路
先分组,取到一个包含分组标签的列表
遍历,取其中每一组进行数据的提取,不会造成数据的对应错乱