专栏首页Python爬虫与数据挖掘在Scrapy中如何利用Xpath选择器从HTML中提取目标信息(两种方式)
原创

在Scrapy中如何利用Xpath选择器从HTML中提取目标信息(两种方式)

前一阵子我们介绍了如何启动Scrapy项目以及关于Scrapy爬虫的一些小技巧介绍,没来得及上车的小伙伴可以戳这些文章:

手把手教你如何新建scrapy爬虫框架的第一个项目(上)

手把手教你如何新建scrapy爬虫框架的第一个项目(下)

关于Scrapy爬虫项目运行和调试的小技巧(上篇)

关于Scrapy爬虫项目运行和调试的小技巧(下篇)

今天我们将介绍在Scrapy中如何利用Xpath选择器从HTML中提取目标信息。在Scrapy中,其提供了两种数据提取的方式,一种是Xpath选择器,一种是CSS选择器,这一讲我们先聚焦Xpath选择器,仍然是以伯乐在线网为示例网站。

1、 打开网站,然后随机选择任意一篇文章进行查看,如下图所示。

我们需要提取的信息主要有标题、日期、主题、评论数、正文等等。

2、接下来我们就可以开始写代码了,基础代码如下图所示,需要注意的是start_urls参数值改为了具体的URL,其他的代码未发生改变。

3、回到原始网页,按下键盘的快捷键F12或者在网页上点击鼠标右键,然后选择“检查(N)”弹出网页的调试界面,如下图所示。

4、点击下图中红色框框的小图标,可以实现网页数据和源码之间的交互,可以很方便的帮助我们定位标签。

5、如下图所示,当我们选择上图中的小图标之后,再选择网页上的标题,尔后网页源码会自动跳转到我们定位的部分,可以看到标题在标签下。

6、尔后我们就可以根据上图中的网页层次结构写出标题的Xpath表达式,这里先提供一种比较笨的方法,从头到尾进行罗列的写,“/html/body/div[1]/div[3]/div[1]/div[1]/h1”,有没有发现灰常的辛苦,像这种大标题信息还比较好提取一些,若是碰到犄角旮旯的信息,就比较难写表达式了,而且这种方式容易出错,效率还低。不过小伙伴们不用灰心,浏览器给我们提供了一个便捷的方式,让我们可以直接复制Xpath表达式。在标题处或者目标信息处右键,然后选择“Copy”,再选择“Copy Xpath”即可进行复制该标签的Xpath表达式,具体过程如下图所示。

可以看到复制的Xpath表达式为“//*[@id="post-113659"]/div[1]/h1”,其中id="post-113659"是属于这篇文章的一个标识,如下图所示。

通过该标识我们就可以很快的定位到标签,其与我们用笨方法手动写出来的Xpath表达式有时候并不是一致的。下面将两个Xpath表达式所匹配的内容分别进行输出。

7、将Xpath表达式写入Scrapy爬虫主体文件中,尔后Debug我们之前定义的main.py文件,将会得到下图的输出。可以看到selector1和selector2中的数据即是网页上的内容,而且内容是一致的。

之后点击停止Debug模式,便可以退出Debug模式。

8、从上图中我们可以看到选择器将标签

也都取出来了,而我们想要取的内容仅仅是标签内部的数据,此时只需要使用在Xpath表达式后边加入text()函数,便可以将其中的数据进行取出。

通过这篇文章,我们可以了解到尽管我们自己写出的Xpath表达式和浏览器给我们返回的Xpath表达式在写法上并不一致,但是程序运行之后,其返回的数据内容是一致的。换句话说,关于某个目标数据的Xpath表达式并不是唯一的,只要符合Xpath表达式语法,即便是写的很短,也是没问题的,你开心就好。此外在Scrapy爬虫框架中,text()函数常常与Xpath表达式运用在一块,用于提取节点中的数据内容。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 在Scrapy中如何利用Xpath选择器从HTML中提取目标信息(两种方式)

    前一阵子我们介绍了如何启动Scrapy项目以及关于Scrapy爬虫的一些小技巧介绍,没来得及上车的小伙伴可以戳这些文章:

    Python进阶者
  • 如何利用Xpath抓取京东网商品信息

    前几天小编分别利用Python正则表达式和BeautifulSoup爬取了京东网商品信息,今天小编利用Xpath来为大家演示一下如何实现京东商品信息的精准匹配~...

    Python进阶者
  • 500 行代码实现 PDF 阅读器

    经过两周的迭代,现在我们的 PyReadon 已经具备一般的 PDF 阅读器的基本功能:

    Python进阶者
  • 【国际模式识别大会ICPR18】纯金干货!周志华等6场特邀报告和论文最全回顾

    作为模式识别领域的旗舰学术会议,国际模式识别大会(ICPR)自1972年起,每两年召开一次。在2014年国际模式识别大会的理事会全体会议上,中国和澳大利亚围绕2...

    新智元
  • 以机器学习的视角来看时序点过程的最新进展

    http://www.tensorinfinity.com/paper_154.html

    SIGAI学习与实践平台
  • 用Python制作一个图片识别工具! 实时监控剪切板图片信息并识别

    云飞
  • 请谨慎使用预训练的深度学习模型

    看起来使用这些预训练的模型已经成为行业最佳实践的新标准。毕竟,有一个经过大量数据和计算训练的模型,你为什么不利用呢?

    AI算法与图像处理
  • 亚马逊广告营收猛增背后:电商落幕,新零售风头正劲

    如果我们将时针拨回到几年前,有人问你亚马逊是一家什么样的公司的时候,你可能毫不犹豫地说,它是一家电商公司。但是,现在这种情况正在发生变化,随着亚马逊业务范围的扩...

    孟永辉
  • WRF模式后处理

    目前,有很多工具可以进行WRF模式后处理,比如NCL,Grads,Python,MATLAB等等,而且每一种语言都有其优势。NCL中有WRF模式后处理的包,可以...

    bugsuse
  • Oracle 19c 新特性:ADG的自动DML重定向增强读写分离

    在前面的文章《Oracle 19c 十大新特性一览》中,我们曾经提到 Oracle 19c的一个重要增强,就是ADG的自动DML转发:

    数据和云

扫码关注云+社区

领取腾讯云代金券