【Rollo的Python之路】Python 爬虫系统学习 (四) XPath学习

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的字符串

---提取页面数据的思路

    先分组,取到一个包含分组标签的列表

    遍历,取其中每一组进行数据的提取,不会造成数据的对应错乱

原文地址:https://www.cnblogs.com/rollost/p/11077201.html