scrapy 爬取下一页,scrapy整站爬取

时间:2018-01-02 17:20作者:scrapy中文网阅读:

经上面scrapy中文文档的教程,我们循序渐进的使用了scrapy,现在你至少已经能爬取一页的多条数据了,这比起Ctrl+V,Ctrl+C,稍微好了一点,但是还是不够好,如果给我十分钟,我不用爬虫,靠毅力也能把数据取回来,一页算神马?我要十页、一百页……这又该如何处理呢?当初小编才接触scrapy的时候,对scrapy爬取分页也颇为困惑,百思不得骑姐,但后来发现原来也狠easy,接下来我们来看scrapy爬取分页的惯用手法,其实这是一个通用格式,学会了基本爬取分页用这招就行了,简直就是一劳永逸!
scrapy分页爬取
接下来,还是继续爬取:http://lab.scrapyd.cn (链接独白:为神马受伤的总是我?)!我们既然要爬取下一页,那我们首先要分析链接格式,找到下一页的链接,那爬取就简单了,我们先来看看,下一页链接长什么样?
scrapy分页爬取
可以看到,下一页的链接如下:
<li class="next">
    <a href="http://lab.scrapyd.cn/page/2/">下一页 »</a>
</li>
那到底如何让蜘蛛自动的判断、并爬取下一页、下一页的内容呢?我们可以这样来做,我们每爬一页就用css选择器来查询,是否存在下一页链接,存在:则爬取下一页链接:http://lab.scrapyd.cn/page/*/,然后把下一页链接提交给当前爬取的函数,继续爬取,继续查找下一页,知道找不到下一页,说明所有页面已经爬完,那结束爬虫。上面的scrapy教程已经学过如何提取简单的内容,那我们不熟悉的就是如何把链接又提交给当前页面爬取的蜘蛛,所以这里学习的重点是:如何把链接提交给本方法或是另一个方法,进行进一步爬取!我们来看一下简单的流程图:
scrapy爬取
爬取内容的代码和上一文档(listSpider)一模一样,唯一区别的是这么一个地方,我们在:listSpider 蜘蛛下面添加了这么几段代码:
next_page = response.css('li.next a::attr(href)').extract_first()  
        if next_page is not None: 
            next_page = response.urljoin(next_page)
            yield scrapy.Request(next_page, callback=self.parse)

首先:我们使用:response.css('li.next a::attr(href)').extract_first()查看有木有存在下一页链接,如果存在的话,我们使用:urljoin(next_page)把相对路径,如:page/1转换为绝对路径,其实也就是加上网站域名,如:http://lab.scrapyd.cn/page/1;接下来就是爬取下一页或是内容页的秘诀所在,scrapy给我们提供了这么一个方法:scrapy.Request()  这个方法还有许多参数,后面我们慢慢说,这里我们只使用了两个参数,一个是:我们继续爬取的链接(next_page),这里是下一页链接,当然也可以是内容页;另一个是:我们要把链接提交给哪一个函数爬取,这里是parse函数,也就是本函数;当然,我们也可以在下面另写一个函数,比如:内容页,专门处理内容页的数据。经过这么一个函数,下一页链接又提交给了parse,那就可以不断的爬取了,直到不存在下一页;

nextSpider完整代码:github


评论去哪里了?

由于搜狐畅言广告越来越丧心病狂,用它一个评论,半个网页都被它占领,感觉已经把灵魂出卖给了魔鬼!SO,为了息众怒小编只能暂且关闭评论,若您实在想找我说话,欢迎关注公众号,给我留言,么么哒!