首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

5分钟掌握xpath语法

可能有点标题党了,因为你是0基础的话,要看10分钟才懂。好了开始我们的正文。

相信很多人刚开始学习xpath语法时,看到xpath语法是一脸懵逼的,因为网上一堆教程上来就是各种专业术语,越讲越复杂,完全学不下去。我在网上搜了好多个文章和教程,发现没有能够很好的把xpath语法系统讲明白的。觉着自己可以写一篇,看看能不能试着讲解的明白些。

下面我就分享下如何快速掌握xpath语法。

说xpath语法之前,先说下html,html其实就是一门技术语言,我们看到的各种网页页面就是用html写的。因为要爬取数据,而数据就是在网页中的,所以我们要有一种方法,去提取网页中我们所需要的内容,而xpath就是实现抓取网页内容的一种方法。

那具体怎么提取呢?我们先看一个html的源代码和页面。

图1:网页源代码,可以生成网页

图2:我们平时所看到的网页,由上面源代码生成

类似,这种成对出现叫做标签,用来定义网页的结构的,理解为书的目录就可以了。

我们可以看到,一个网页就是用类似一个用大于小于号的标签写成的。这个标签可以看作目录或者地址,根据目录一级级可以定位任何元素。而xpath就是根据这些标签去定位要爬取的内容。其实要找这些元素还分为两种路径,一种是绝对路径,一种是相对路径。那什么是绝对路径呢。如果把html的结构比作一个大树的话,那么绝对路径就是从树根开始寻找某个节点,绝对路径就是从树的某个树枝开始找。

比如我们要找网页中的“大象”:

绝对路径就要这样写

相对路径可以这样写

解释一下绝对路径,“/”代表从根节点选,要与标签一起使用,/html/body/div[1]/span/a[1]代表就是从根节点html标签开始找,找到后再把body视为根节点继续找,以此类推直到最后,可以看到,有[1]这样的序号,是因为有多个这样的标签,大象在第一个,所以用a[1]表示,a[2]会定位到狮子。

相对路径,//代表从中间某个节点开始找,//span就是从span这个标签下找(会找到动物和植物)。

最后是a[1],可以看到相对绝对路径写法多了个[@class="animal"],是因为如果用//span/a[1]定位的不只是大象,还有玫瑰。加上[@class="animal"]就可以唯一定位到“大象”。其实这就讲到了属性。属性是标明了html标签的类别,在标签内部,比如animal就在的里面,“大象”在标签外面。

当标签都一样时,就可以用属性来区分。类似的也可以用id区分,与class用法一样也是在标签内部。

那[@class="animal"]代表什么意思呢,@代表要用属性来定位,后面跟的是属性以及属性的值,表示如果跟语法中的属性一致表示就是我们要找的元素。记住这种结构,不能缺少[]和双引号

其实定位了元素还不算,因为只是定位到了,还要把他提取出来,那怎么取呢?

要用到两个python的requests和lxml两个外部库(别人写好的代码,可以实现某种功能),requests用于把要爬取的网页获取过来,而lxml负责解析,下面给出一个代码示例

意思是导入requests库来使用

表示从lxml导入etree模块来使用,如果不懂可以忽略,后面会讲解原理。

url就是要爬取的网址,比如这个网址就是上方图2的网址

代表获取网址的内容

代表把网址的内容解析好

都能获取到“大象”,一个是绝对路径方法,一个相对路径。

text()是获取所定位位置的文本内容,@class表示是获取所定位位置的属性值。

[0]这里代表的是获取列表的第一个内容,因为用xpath获取到的内容是放在一个列表中,列表中的第一个就是我们要获取的内容,技术语言与我们日常某些习惯有些不同,因为大部分时候,是从0开始的不是从1开始的,所以[0]代表列表的第一个元素。

最后如果你看完还是不知道如何写,其实有一个办法:

就是打开网址,然后右键点击检查/审查元素(不同浏览器名字会不一样)

找到要获取的内容,然后右键可以获取xpath路径

最后分享一个小插件xpath helper,利用xpath hleper输入语法,自动匹配要获取的内容,用于验证写的xpath语法是否正确。

好了,以上就是xpath的语法基础用法,如果有疑问欢迎留言。后续我会分享更多内容。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200222A0GUR400?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券