/前言/
在上一篇文章中:如何利用Scrapy爬虫框架抓取网页全部文章信息(上篇),我们已经获取到了文章的详情页链接,但是提取到URL之后,如何将其交给Scrapy去进行下载呢?下载完成之后又如何去调用我们自己定义的解析函数呢?此时就需要用到Scrapy框架中的另外一个类Request。具体教程如下。
/具体实现/
1、这个Request存放的位置在scrapy.http下,如下图所示,可以直接导入即可。
我们需要将这个Request对象交给Scrapy,尔后Scrapy爬虫框架就会帮助我们去进行下载了。
2、Request对象里有初始化参数url以及回调函数callback,当然还有其他的参数,这里不铺开讲。我们将获取到的文章链接URL传给这个初始化参数url,之后就可以构建Request啦。在这里需要说明的是,这个Request是文章详情页的页面,而不是文章的列表页。对于文章详情页,那么接下来,我们需要对每篇文章的具体信息进行提取。
3、基于之前文章的铺垫,提取网页的目标信息,可以将提取目标信息的表达式部分封装成一个函数parse_detail(),其作为一个callback回调函数,用于提取文章的具体字段。这里以CSS选择器为例,如下图所示。如果想以Xpath选择器进行提取的话也没有问题,具体实现可以参考历史文章中关于CSS和Xpath选择器用法的文章。具体的实现过程,在此暂不赘述。
4、尔后将Request类完善一下,加入callback参数,记得在parse_detail前边加入self,表示在当前类当中的,不然的话就会报错的。此外,parse_detail虽然为函数,但是在此处务必不要加括号,这就是回调函数的特色。
5、细心的小伙伴可能已经注意到上图中Request类中的url部分很复杂,加入了parse.urljoin()函数,其实这个也是个小技巧,这里简单说一下,希望对小伙伴们有帮助。parse.urljoin()函数的作用是将相对的地址组合成一个完整的url,有的时候网页标签中给我们呈现的并不是一个完整的URL链接或者完整的域名,而是省去了网页的域名,如果没有域名的话,默认的域名是当前网页的域名(即response.url),此时我们就需要进行URL的拼接,形成一个完整的URL地址,以方便正常访问。
6、Request类初始化之后,如何将它交给Scrapy来进行下载呢?其实很简单,只需要在前面输入一个yield关键字即可,其作用是将Request里边的URL交给Scrapy去进行下载。
至此,解析列表页中所有文章的URL并交给Scrapy进行下载的步骤已经完成,接下来我们需要完成的是如何提取下一页的URL并交给Scrapy进行下载。下一篇文章将着重解决这个问题,敬请期待~~~
/小结/
本文基于Scrapy爬虫框架,利用CSS选择器和Xpath选择器解析列表页中所有文章的URL,并交给Scrapy进行下载,至此数据采集基本功能已经完成了。下一篇文章将完成如何提取下一页的URL并交给Scrapy进行下载,敬请期待。
------------------- End -------------------