本来打算写的标题是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去看代码找这个属性
div的id属性,下面的子元素h4的内容,直接利用文本方法来获取元素的内容,然后输出
这里的子元素层级关系必须按顺序写好,不然会报错的