爬虫----解析工具之Xpath

一、什么是Xpath

        XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。

        我们爬取下来的一般都是HTML,Xpath是XML路径语言,那么和我们爬虫有什么关系的。其实XML与HTML结构相似,而Xpath是使用路径表达式来选取 XML 文档中的节点或者节点集,所以也同样适用与HTML。

二、Xpath的用法

        使用Xpath,需要先知道Xpath表达式有哪些,看下表

表达式

描述

nodename

选取此节点的所有子节点。

/

从根节点选取。

//

从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。

.

选取当前节点。

..

选取当前节点的父节点。

@

选取属性。

        看了上述Xpath是表达式是不是还是一脸懵,下面我来做一些实例来带大家更加熟悉Xpath。大家打开我的另一篇文章爬虫----请求的url中多了20%(日常小问题)我们打开开发者模式,选中这篇文章的标题,然后右击题目所对应的标签,复制里有个复制Xpath,点击它。然后我们就得到了,这个标题所对应的Xpath路径。

        点击这个小鼠标,然后再点击标题就选中题目啦。

        我们复制出来的Xpath路径是  //*[@id="articleContentId"]

        是不是感觉很复杂,甚至还有上述表达式中没有的符号。下面我就给大家分析下这个Xpath路径。

        首先,我们看//,这个文档上说的比较官方,其实就是从当前节点匹配下面的所有节点,而节点在HTML中就可以当作一个标签啦。那么这个是从哪个节点开始匹配下面的所有节点的呢,如果//前面什么都没有呢,就是从根节点开始匹配所有标签;如果前面有其他标签,那么就是从这个标签开始;如果是 . 呢,这个就是从当前节点开始匹配。下一个,看 * ,这个是通配符,可以表示任何标签。接着看 [@id="articleContentId"] 这是一个整体,有前端基础的朋友肯定看出来了这个是选择器,是用来定位标签的,这个对我们爬虫可大有帮助,甚至于Css样式也对我们有帮助。@可以选取标签的属性,既可以取标签属性的值,也可以对标签的属性进行限制。就比如想要取到字体颜色为红色的p标签,//p[@colour='red'] ,限制的值要加上引号。如果,我们要取这个属性值的话直接@属性键名,就可以啦,比如取p标签的colour属性对应的值, //p/@colour。/表示匹配当前节点的下一级节点。现在,我们可以大致知道我们复制出来的Xpath路径大概的含义是:从根节点开始匹配根节点下面的所有标签,取标签属性id为articleContentId的标签。当然在这里我们并没有取到标题,那么怎么能取到这些在标签下一级的文本呢?我们只需要加上text()即可,比如我们要取到标题的话 //*[@id="articleContentId"]/text() 即可。

        补充:[n]表示取第n个如//div/p[2]表示取div下面的第二个p标签。注意:这个是从1开始,不是0

         这样关于Xpath我们的表达式我们也就讲完了。

三、Xpath用法建议

        当然一个工具在不同人中,有的人能把它玩的淋漓尽致,有的人却用的一塌糊涂。

        关于使用Xpath,给大家一些建议。

  1. 不要一级一级的匹配,如果一级一级的话,只要html有轻微改动,就有可能导致这个爬虫失效;
  2. 抓取数据时,最好成块状抓取,这样数据不会乱。就比如抓取一个列表页,把一个一个列表抓下来后再抓取里面的数据。(这个不知道该怎么表达,可能你看起来有点懵)
  3. 暂无

四、实战演练

        憨了吧唧的人于八的博客

        任务:抓取每篇文章的标题、发布时间、详情链接(在上述链接页爬取)

        检查:打开任务管理器,点击元素或者英文Elements,按Ctrl+f,会出现一个搜索框,里面可以写入Xpath表达式,正确的话会取到元素。

五、附加

        在清洗数据时,有时候会遇到需要多个标签属性才可以限制到元素,或者不同的标签属性是一类数据。这时候就需要用到Xpath的并且和或者啦~

         Xpath中的并且和或者的表示方法与python中的一样使用and和or表示。

                并且

//标签[属性1 and 属性2]

                或者

//标签[属性1 or 属性2]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值