爬虫之数据提取: xpath语法

4.数据提取-lxml模块

4.1. 了解 lxml模块和xpath语法

对html或xml形式的文本提取特定的内容,就需要我们掌握lxml模块的使用和xpath语法。

  • lxml模块可以利用XPath规则语法,来快速的定位HTML\XML 文档中特定元素以及获取节点信息(文本内容、属性值)

  • XPath (XML Path Language) 是一门在 HTML\XML 文档中查找信息的语言,可用来在 HTML\XML 文档中对元素和属性进行遍历

 

 lxml模块使用xpath语法对xml或者html进行数据提取

xpath可用于标签定位并进行相关操作

知识点:了解 lxml模块和xpath语法

 

4.2. 谷歌浏览器xpath helper插件的安装和使用

4.2.1 谷歌浏览器xpath helper插件的作用

在谷歌浏览器中对当前页面测试xpath语法规则

4.2.2 谷歌浏览器xpath helper插件的安装和使用

  参考文章分类-- 插件

 

知识点:了解 谷歌浏览器xpath helper插件的安装和使用

 

5.xpath的节点关系

学习xpath语法需要先了解xpath中的节点关系

5.1 xpath中的节点是什么

每个html、xml的标签我们都称之为节点,其中最顶层的节点称为根节点。我们以xml为例,html也是一样的

 

 

5.2 xpath中节点的关系

 

 

authortitle的第一个兄弟节点

 

6. xpath语法-基础节点选择语法

  1. XPath 使用路径表达式来选取 XML 文档中的节点或者节点集。

  2. 这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似。

  3. 使用chrome插件选择标签时候,选中时,选中的标签会添加属性class="xh-highlight"

6.1 xpath定位节点以及提取属性或文本内容的语法


表达式描述
nodename 选中该元素。
/ 从根节点选取、或者是元素和元素间的过渡。
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
. 选取当前节点。
.. 选取当前节点的父节点。
@ 选取属性。
text() 选取文本。

6.2 语法练习


接下来我们通过糗事百科的页面来练习上述语法:https://www.qiushibaike.com/hot/

    1. 选中根节点
      • html
      • /html

    2. 绝对路径选中title节点
      • /html/head/title

    3. 相对路径选中title节点
      • //title

    4. 选中当前根节点
      • /html/.

    5. 选中当前节点(title节点)的父节点
      • //title/..

    6. 获取当前节点(title节点)的文本内容
      • //title/text()

    7. 获取当前节点(link节点)中指定属性的值
      • //link/@href

 知识点:掌握 xpath语法-选取节点以及提取属性或文本内容的语法

 

7. xpath语法-节点修饰语法

可以根据标签的属性值、下标等来获取特定的节点

7.1 节点修饰语法 

路径表达式结果
//title[@lang="eng"] 选择lang属性值为eng的所有title元素
/bookstore/book[1] 选取属于 bookstore 子元素的第一个 book 元素。
/bookstore/book[last()] 选取属于 bookstore 子元素的最后一个 book 元素。
/bookstore/book[last()-1] 选取属于 bookstore 子元素的倒数第二个 book 元素。
/bookstore/book[position()>1] 选择bookstore下面的book元素,从第二个开始选择
//book/title[text()='Harry Potter'] 选择所有book下的title元素,仅仅选择文本为Harry Potter的title元素
/bookstore/book[price>35.00]/title 选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00。

 

出现在中括号[]中的@是用来修饰节点的,方便快速精准定位到该节点

出现在结尾的/@是用来获取属性值的

 

7.2 关于xpath的下标

  • 在xpath中,第一个元素的位置是1

  • 最后一个元素的位置是last()

  • 倒数第二个是last()-1

7.3 语法练习

接下来我们通过糗事百科的页面来练习上述语法:https://www.qiushibaike.com/hot/

豆瓣top250练习上述语法: https://movie.douban.com/top250

 

通过索引查找(修饰)节点

  1. 绝对路径选中某个div节点(第三个div节点)
    • /html/body/div[1]/div[1]/div[2]/div[3]

  2. 绝对路径选中最后div节点(最后一个节点是第25个)
    • /html/body/div[1]/div[1]/div[2]/div[25]
    • /html/body/div[1]/div[1]/div[2]/div[last()]

  3. 绝对路径选中某个区间范围的div节点
    • /html/body/div[1]/div[1]/div[2]/div[position()>20]

 

通过属性值查找(修饰)节点

  1. 相对路径选中某个div节点(第三个div)
    • //div[@class="col1 old-style-col1"]/div[3]

  2. 相对路径选中倒数第二个div节点(最后一个节点是25)
    • //div[@class="col1 old-style-col1"]/div[24]
    • //div[@class="col1 old-style-col1"]/div[last()-1]

  3. 相对路径选中某个区间范围的div节点
    • //div[@class="col1 old-style-col1"]/div[position()>20]

  4. 相对路径获取某个div标签的属性值(id值)
    • //div[@class="col1 old-style-col1"]/div[1]/@id

 通过子节点的值修饰(查找节点)

  1. 获取  span节点  下  i节点  的值大于1000的所有span节点
    • //span[i>1000]  
  2. 获取div节点下 第二个span标签节点的值大于9.5的 div节点
    • //div[span[2]>9.5]

 

通过包含修饰

  1. 通过属性名和属性值(部分包含or全部包含)查找节点
    • //div[contains(@id,'qiushi_tag')]

  2. 通过标签内容(部分包含or全部包含)查找节点
    • //span[contains(text(),'下一页')]

 

 

练习二:

从itcast的页面中,选择所有学科的名称、第一个学科的链接、最后一个学科的链接:http://www.itcast.cn/

 

  • 所有的学科的名称
    • //div[@class="nav_txt"]//a[@class="a_gd"]
  • 第一个学科的链接

    • //div[@class="nav_txt"]/ul/li[1]/a/@href

  • 最后一个学科的链接
    • //div[@class="nav_txt"]/ul/li[last()]/a/@href

 

知识点:掌握 xpath语法-选取特定节点的语法

 

8. xpath语法-其他常用节点选择语法

可以通过通配符来选取未知的html、xml的元素

8.1 选取未知节点的语法

通配符描述
* 匹配任何元素节点。
node() 匹配任何类型的节点。

8.2 语法练习

从itcast的页面中 http://www.itcast.cn/ ,选中全部的标签、全部的属性

  • 全部的标签
    • //*

  • 全部的属性

    • //node()

 

知识点:掌握 xpath语法-选取位置节点的语法

 

补充:xpath的复合语法:用于同个网站的不同页面( | 表示 或 )

//h2/a | //td/a

 

....

posted @ 2021-07-05 21:14  麟灬  阅读(220)  评论(0)    收藏  举报