运行Scrapy爬取网页的数据信息

时间:2024/5/25来源:脱发原因 作者:佚名 点击:

Scrapy中解析Response

前面我们看到,parse()方法的参数是response是start_urls里面的链接爬取后的结果。所以在parse()方法中,我们可以直接对response变量包含的内容进行解析,比如浏览请求结果的网页源代码,或者进一步分析源代码内容,或者找出结果中的链接而得到下一个请求。

我们可以看到网页中既有我们想要的结果,又有下一页的链接,这两部分内容我们都要进行处理。

首先看看网页结构,每一页都有多个class为quote的区块,每个区块内都包含text、author、tags。那么我们先找出所有的quote,然后提取每一个quote中的内容。

提取的方式可以是CSS选择器或XPath选择器。在这里我们使用CSS选择器进行选择,parse()方法的改写如下所示:

这里首先利用选择器选取所有的quote,并将其赋值为quotes变量,然后利用for循环对每个quote遍历,解析每个quote的内容。

对text来说,观察到它的class为text,所以可以用.text选择器来选取,这个结果实际上是整个带有标签的节点,要获取它的正文内容,可以加::text来获取。这时的结果是长度为1的列表,所以还需要用extract_first()方法来获取第一个元素。而对于tags来说,由于我们要获取所有的标签,所以用extract()方法获取整个列表即可。

使用Item

上文定义了Item,接下来就要使用它了。Item可以理解为一个字典,不过在声明的时候需要实例化。然后依次用刚才解析的结果赋值item的每一个字段,最后将Item返回即可。

QuotesSpider的改写如下所示:

如此一来,首页的所有内容被解析出来,并被赋值成了一个个QuoteItem。

后续Requests

上面的操作实现了从初始页面抓取内容。那么,下一页的内容该如何抓取?这就需要我们从当前页面中找到信息来生成下一个请求,然后在下一个请求的页面里找到信息再构造再下一个请求。这样循环往复迭代,从而实现整个网站的爬取。

将刚才的页面拉到最底部,如下所示:

这里有一个Next按钮。查看一下它的源代码,可以发现它的链接是/page/2/,所以全链接应该如下所示:

通过这个链接我们就可以构造下一个请求。

构造请求时需要用到scrapy.Request。这里我们传递两个参数——url和callback,这两个参数说明如下:

url:它是请求链接callback:它是回调函数。当指定了该回调函数的请求完成之后,获取到响应,引擎会将该响应作为参数传递给这个回调函数。回调函数进行解析或生成下一个请求,回调函数如下文的parse()所示。由于parse()就是解析text、author、tags的方法,而下一页的结构和刚才已经解析的页面结构是一样的,所以我们可以再次使用parse()方法来做页面解析。

接下来我们要做的就是利用选择器得到下一页链接并生成请求,在parse()方法后追加如下代码:

运行

接下来,我们就可以打开terminal进行运行命令啦,命令如下:

scrapycrawlquotes

就可以看到Scrapy的运行结果了:

首先Scrapy输出了当前的版本号以及正在启动的项目名称。接着输出了当前settings.py中一些重写的配置。然后输出了当前所应用的Middlewares和Pipelines。Middlewares默认是启用的,可以在settings.py中修改。Pipelins默认为空,同样也可以在settings.py中配置。

接下来就是输出各个页面的抓取结果了,可以看到爬虫一边解析一边翻页,最后将所有内容抓取完毕,然后停止。

最后,Scrapy输出了整个抓取过程的统计信息,这样整个Scrapy程序就成功运行啦,下一节我们将其存到MongoDB数据库中。



转载注明  http://www.hzlqsc.com/tfyy/14400.html

首页| 网站简介| 发布优势| 广告合作| 隐私保护| 服务条款| 合作伙伴| 网站地图| 版权申明

版权所有 脱发网站 
Copyright 2012-2020 All Rights Reserved.