前一阵子咱们介绍了如何启动Scrapy项目以及关于Scrapy爬虫的一些小技巧介绍,没来得及上车的小伙伴能够戳这些文章:html
手把手教你如何新建scrapy爬虫框架的第一个项目(上)web
手把手教你如何新建scrapy爬虫框架的第一个项目(下)浏览器
今天咱们将介绍在Scrapy中如何利用Xpath选择器从HTML中提取目标信息。在Scrapy中,其提供了两种数据提取的方式,一种是Xpath选择器,一种是CSS选择器,这一讲咱们先聚焦Xpath选择器,仍然是以伯乐在线网为示例网站。scrapy
一、 打开网站,而后随机选择任意一篇文章进行查看,以下图所示。ide
咱们须要提取的信息主要有标题、日期、主题、评论数、正文等等。函数
二、接下来咱们就能够开始写代码了,基础代码以下图所示,须要注意的是start_urls参数值改成了具体的URL,其余的代码未发生改变。post
三、回到原始网页,按下键盘的快捷键F12或者在网页上点击鼠标右键,而后选择“检查(N)”弹出网页的调试界面,以下图所示。网站
四、点击下图中红色框框的小图标,能够实现网页数据和源码之间的交互,能够很方便的帮助咱们定位标签。
五、以下图所示,当咱们选择上图中的小图标以后,再选择网页上的标题,尔后网页源码会自动跳转到咱们定位的部分,能够看到标题在
六、尔后咱们就能够根据上图中的网页层次结构写出标题的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表达式所匹配的内容分别进行输出。
七、将Xpath表达式写入Scrapy爬虫主体文件中,尔后Debug咱们以前定义的main.py文件,将会获得下图的输出。能够看到selector1和selector2中的数据便是网页上的内容,并且内容是一致的。
以后点击中止Debug模式,即可以退出Debug模式。
八、从上图中咱们能够看到选择器将标签
也都取出来了,而咱们想要取的内容仅仅是标签内部的数据,此时只须要使用在Xpath表达式后边加入text()函数,即可以将其中的数据进行取出。
经过这篇文章,咱们能够了解到尽管咱们本身写出的Xpath表达式和浏览器给咱们返回的Xpath表达式在写法上并不一致,可是程序运行以后,其返回的数据内容是一致的。换句话说,关于某个目标数据的Xpath表达式并非惟一的,只要符合Xpath表达式语法,即使是写的很短,也是没问题的,你开心就好。此外在Scrapy爬虫框架中,text()函数经常与Xpath表达式运用在一块,用于提取节点中的数据内容。