Python爬虫基础之XPath语法与lxml库的用法详解

  

  

本来打算写的标题是XPath语法,但是想了一下Python中的解析库lxml,使用的是XPath语法,同样也是效率比较高的解析方法,所以就写成了XPath语法和lxml库的用法

  

XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言。
  

  

XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。XPath同样也支持HTML。
  

  

XPath是一门小型的查询语言。
  

  

python中lxml库使用的是Xpath语法,是效率比较高的解析方法。

  

下面话不多说了,来一起看看详细的介绍吧

  


  

  

为什么要用这个库呢,因为要写爬虫啊,利用lxml库来解析HTML代码,同时lxml也继承了libxml2的特性自动修正HTML代码,利用脉冲安装即可

        pip安装lxml      


  

  

XPath是一门在XML文档中查找信息的语言,可以用于在XML文档中通过元素和属性进行导航

  

<强>举个栗子& # 128526;

  

我们可以使用XPath提取网站地图中的所有链接,也就是说可以使用XPath去找我们HTML中的一些具体的东西

  

<强>节点关系
  

  

在XPath中,有七种类型的节点:元素,属性,文,本命名空间,处理指令,注释以及文档节点(或称为根节点)

  

<强>再举个栗子& # 128526;

        & lt; urlset>   & lt; url>   & lt; loc> https://qq52o.me</loc>   & lt; lastmod> 2018 - 04 - 28 - t19:00:42 + 00:00   & lt; changefreq> daily   & lt; priority> 1.0 & lt;/priority>   & lt;/url>   & lt;/urlset>      

第一个:父(父)

  

每个元素以及属性都有一个父

  

url元素是loc, lastmod, changefreq以及优先级元素的父

  

第二个:子(孩子)

  

元素节点可有零个、一个或多个子

  

loc, lastmod changefreq以及优先级元素都是url元素的子

  

第三个:同胞(兄弟姐妹)

  

拥有相同的父的节点

  

loc, lastmod changefreq以及优先级元素都是url元素的同胞

  

第四个:先辈(祖先)

  

某节点的父,父的父,等等

  

loc元素的先辈是url元素和urlset元素

  

第五个:后代(后代)

  

某个节点的子,子的子,等等

  

urlset的后代是url, loc, lastmod, changefreq以及优先级元素

  

如果你分不清楚,就按照子元素从上到下的去找元素节点

  

<强>选取节点
  

  

XPath使用路径表达式在XML文档中选取节点,节点是通过沿着路径或者一步来选取的,也就是上面所说的按照子元素从上到下去找元素节点

  

这些是最有用的路径表达式& # 128161;

  

           表达式   描述         节点名   选取此节点的所有子节点/从根节点选?/从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置         .   选取当前节点         ..   选取当前节点的父节点         @   选取属性            

  

实例
  

  

           路径表达式   结果         urlset   选取urlset元素的所有子节点/urlset   选取根元素urlset         urlset/url   选取属于urlset的子元素的所有url元素//url   选取所有url子元素,而不管它们在文档中的位置         urlset//url   选择属于urlset元素的后代的所有url元素,而不管它们位于urlset之下的什么位置//@href   选取名为href的所有属性            

  

其他XPath语法请参考w3school

  

<强> XPath实例测试
  

  

提取本站网站地图中id属性为内容的的子元素h4的内容以及子元素一个的href属性,F12去看代码找这个属性

  

 Python爬虫基础之XPath语法与lxml库的用法详解

  

div的id属性,下面的子元素h4的内容,直接利用文本方法来获取元素的内容,然后输出

  

 Python爬虫基础之XPath语法与lxml库的用法详解

  

这里的子元素层级关系必须按顺序写好,不然会报错的

Python爬虫基础之XPath语法与lxml库的用法详解