xpath语法大全

ads

大家好,欢迎回到网络爬虫专题。上一章讲完了获取HTML文档的操作。这一章将讲述爬虫中最重要的部分,解析(提取)HTML文档信息。服务器给我们的HTML文档往往有几千上万行代码,然而数据只是其中部分,我们不可能手动逐行删改,这就失去了爬虫的意义

提取HTML文档信息,目前主要有三种方式:re(正则表达式)、BS4(BeautifulSoup)和Xpath。这三种方式各有优劣。

解析方式
解析速度 上手难度
BS4


Xpath


re

这三种方式以后都会提到,Mark先从Xpath开始主要是因为re需要有一点思维基础(可以从Xpath中锻炼),而BS4因为上手简单,已经有很多文章都在讲了。BS4对于小任务量的提取是很方便的,但是任务量一旦提高,就能明显感觉到耗时增加。


一、认识Xpath

Xpath语言,即XML Path LanguageXML径语言),是一种用来确定XML文档或HTML文档中某部分位置的语言。可以在文档中对元素和属性进行遍历。这里的XML是什么就不在过多地解释了,知道Xpath语言常用于查找信息即可。

Xpath查找数据主要依靠的是规则。前文提到,HTML文档是一种超文本的文档,其中包含有层级的标签,要提取其中的数据就要遵循一定的规则,Xpath语言会利用HTML文档中的标签信息来编写这种规则。

与其说Xpath是一种语言,不如说它是一款工具。将Xpath插件安装到谷歌浏览器中,就可以在网页上实时进行数据筛选,得到规则之后就可以移植到爬虫程序中,让爬虫程序自动爬取。

Xpath插件获取方式如下(百度网盘):

链接:https://pan.baidu.com/s/1QjDOp75Cc-AaCMNKJ9grOw

提取码:1234


二、安装Xpath

Xpath插件是一个.crx文件,安装时可能会出现失败的问题,建议大家将后缀名.crx修改为.rar,并解压到一个不变的位置安装到谷歌浏览器后一旦修改位置需要重新安装插件

安装插件的方式:进入谷歌浏览器后点击右上方的三个点,选择“更多工具”,然后选择扩展程序。

为了方便大家,Mark进行了谷歌汉化,在设置中选择语言,添加简体中文,选择简中之后重启浏览器即可,未汉化的按照选项位置也可以完成
进入插件安装页面,因为一些原因,谷歌自带的插件商店是不能使用的(有方法的随意)。在左上角看到加载已经解压的扩展程序(没有的话就打开左上角的开发者模式)。



将解压好的插件文件直接拖拽到页面中即可完成安装。


完成安装之后页面会显示一个扩展程序的简介,右上角会多出一个拼图的图标,点击拼图图标,将Xpath Helper选项的常驻选上,即可看到Xpath的图标出现在上方。具体如下图:


以上步骤完成之后,可以打开任意网页,点击Xpath图标,页面上方会出现一个黑框,其中有两个框分别显示query和result,左边的填写规则,右边会显示该规则下筛选出的数据。


Xpath插件安装完成,我们可以使用插件编写规则,确定筛选规则之后移植到爬虫程序中,利用相应的库就能实现自动解析并爬取数据。


三、Xpath基本语法
1、节点选取

Xpath作为一款查找语言,其语法非常简单。以下表格就是常用的Xpath语句的节点选取部分

表达式
描述
示例
示例说明

nodename

(标签名)

选取节点下的所有子节点 div
选取div下的所有子标签
//
从全局中选取节点 //div
选取整个HTML文档下的div标签
/
选取某节点下的子节点
//div/title 选取div标签下的所有title标签
@
选取带某个属性的节点 //div[@id]
选取div标签下所有包含id属性的标签
.
当前节点下
./span
选择当前节点下的span标签

这里最重要的是///、@和 . 四个语法,通过这四种语法大部分的数据都能提取出来。“ . ”这种方式会在下一章爬虫代码中应用更多一些,这里知道即可。(用过shell应该知道它表示当前目录下,这里和“当前目录下”意思差不多)

以百度首页为例,演示几个简单的例子。

(1)输入//a,表示选取整个HTML文档中的所有a标签。


可以看到右边result中显示了所有名称为a标签的内容,一共53个,并在页面上以黄色做了标记。使用这种方式,在a标签之下的所有标签都会被取出来。热搜内容在a标签之下,本身是一个span标签,也被取了出来。


如果将光标放在query中并点击,会在HTML文档中以紫色为底色高亮显示对应的标签。

(2)输入//a/span,表示提取a标签之下的所有span标签。这里要结合HTML文档的层次结构。


从结果可以看出提取出了a标签下的所有span标签,并且每个span标签都分别显示。和上一个例子不同,这里的“沸”,不再和“马龙卫冕男单金牌”合并为一条信息。


(3)有时前两种方式不能完成信息的筛选,就要用到@,利用标签的属性进行筛选。

上一个例子中除了热搜,还拿到了很多span标签的内容,如果只需要热搜内容,就可以输入//a/span[@class="title-content-title"]。即可拿到所有热搜的内容。

(在HTML文档中双击对应属性,即可打开编辑,能直接复制需要的属性)

2、谓语

谓语部分主要用于查找的细节问题,比如需要第n个数据而不是所有的数据。谓语很好理解,上边的根据属性查找就有谓语的应用。

表达式
意义
//div/a[1]
选择div标签下的第一个a标签
//div/a[k]
选择div标签下的第k个a标签
//div/a[last()]
选择所有div标签下的最后一个a标签
//div/a[position()<3]
选择所有div标签下的前两个a标签
//div/a/@class
选择所有div标签下的a标签的class属性

这里有两点注意,第一是Xpath语言和python不同,Xpath语言的第一个就是1,而不是0。第二就是谓语中最后一行显示属性的方法,有时某些数据会写在属性中而不是作为汉字写在<>之外,所以要知道如何提取属性信息。


3、通配符

Xpath的通配符有两个。

通配符
意义
示例
说明
*
匹配任意节点
//div/* 选择div中的所有子标签
@*
匹配任意属性
//div[@*]
选择有属性的所有div标签

注意@*,如果div标签没有属性值,则不会被选中。


4、选取多个路径

当选择多个路径时,可以使用“ | ”表示。例如//div | //head,表示选取div和head两个标签中的内容。


有一点注意,Xpath语法主要显示的是<>以外的中文(非设定显示属性的情况下),有时标签内没有中文,在result框内就没有数据显示,但是结果数量非零。


使用Xpath编写筛选规则的前提是对HTML文档的结构有一定的认知,HTML网页的结构是规则的,同一类型的信息一般都在相同的结构之下。

查找相同内容时有可能会出现不同的Xpath语句,尽可能地掌握较多的查询规则,在爬虫程序中因为网站更新,网页变化等原因可能导致某个规则无法使用,这时掌握另外的查询规则就能更方便地找到数据。


四、综合示例

(1)爬取百度首页左上角的“新闻”、“新闻的链接”等内容。

方法:先找到爬取内容在HTML文档的位置,根据标签信息和标签的层次关系编写筛选规则。如果当前标签名称不能定位,要找上一级标签,上一级标签(一般找两到三级标签)无法定位考虑用属性和各种Xpath谓语。






类比可找其他内容,“地图”、“hao123”、“直播”等,查询规则不唯一。
注意百度首页因为登录等问题,返回的HTML文档细节有可能不同,尝试时输入文章中的规则有可能得不到想要的东西。

(2)解释 //div[@id="u"] 和 //div[@id="u"]/* 的区别。
这两者区别在于结果数量不同,第一个结果数量为1,第二个结果数量为4(有一个没有中文内容)。
第一个表示所有符合标签名为div,id为“u”的标签下的内容,这是一个结果,而第二个表示所有在标签名为div,id为“u标签下,所有标签的内容,有点绕,放一张图应该就能理解了。


(3)使用Xpath找到豆瓣电影中《中国医生》的剧情简介和短评



查询方式不唯一。
短评这里可以看出,结果只有20条,但是所有的结果有63493条,如果我们想爬取短评做电影评论词频分析,就需要爬虫了,手动翻页是一件多么让人痛苦的事情。

(4)HTML文档中注释内容的提取


白蛇2:青蛇劫起这部电影的制片国家/地区:中国大陆,是作为一个注释的类型存在的,这样的数据要如何提取?


提取方式出现了一些改动,但是并不难理解。在span标签下,有一个属性为文本内容是“制片国家/地区:”的标签(也就是“表示片国家/地区:的那个标签”),跟在这个标签后面的文本内容的第一个,就可以筛选出作为注释的内容。如果没有后面的[1],就会把所有的文本内容都筛选出来。
这个例子也告诉我们在[ ]中的内容不一定要使用@符号

除了上边的例子之外,双斜杠之后也可以用双斜杠,并没有规定双斜杠之后只有单斜杠。(没找到合适的例子,简单说一下)
<div id="1">XXX  <div id="2">YYY    <p>ZZZ    </p>  </div></div>
如果使用上面的文档,查找ZZZ,就不能使用//div[@id="1"]/p,单斜杠一般表示有直接关系的内容,在第一个div标签下,直接关系的只有id为2的div标签,找不到p标签,结果会什么都没有,而//div[@id="1"]//p就可以找到,表示在id为1的div标签的全局下,找p标签。

五、小结

这一章主要讲述了Xpath语法的相关内容,其实谷歌浏览器提供了直接复制Xpath的方式,能直接拿到对应信息的Xpath查询规则。


但是Mark希望大家能明白Xpath语法的意义,一旦谷歌提供的查询规则不能使用,能自己动手写出另一种规则,而不是只知道Ctrl C+Ctrl V。

这章主要内容不在于编程,而是熟练使用Xpath的基本语法。熟悉这些语法,大部分的数据都能从HTML文档中提取到。再将这种规则应用于爬虫程序,就能实现自动化爬取相关内容。

欢迎大家留言。

最后编辑于:2024/1/18 拔丝英语网

admin-avatar

英语作文代写、国外视频下载

高质量学习资料分享

admin@buzzrecipe.com