2015-06-23更新:
之前写这篇的时候还没有遇到具体的场景,只是觉得有这样一种方法就记下来了。
今天刚好遇到这个需求,要抓取一个BBS的内容,板块主页只显示了文章标题、作者和发表时间,需要做的是根据时间过滤,抓取每天最新的内容。利用Rule规则进行URL提取后只保留了链接地址,而失去了上下文信息(发布时间),如果要过滤只能是在抓取链接内容之后再获取时间,实际上造成不必要的浪费。使用此篇文章的方法可以在抓取链接之前就过滤,避免了无用数据的抓取。
上上篇scrapy爬虫起步(3)– 利用规则实现多页面抓取给出了利用CrawlSpider的Rule实现多页面抓取的方法,实际上直接利用BaseSpider也能实现多页面抓取。
具体思路:还是以我们的豆瓣小组为例吧,豆瓣社科小组,我们将首页地址作为start_url参数,从页面源码找到其余分页,如下:
<div class="paginator">
<span class="prev"><前页</span>
<span class="thispage" data-total-page="9">1</span>
<a href="http://www.douban.com/group/explore?start=20&tag=社科" >2</a>
<a href="http://www.douban.com/group/explore?start=40&tag=社科" >3</a>
<a href="http://www.douban.com/group/explore?start=60&tag=社科" >4</a>
<a href="http://www.douban.com/group/explore?start=80&tag=社科" >5</a>
<a href="http://www.douban.com/group/explore?start=100&tag=社科" >6</a>
<a href="http://www.douban.com/group/explore?start=120&tag=社科" >7</a>
<a href="http://www.douban.com/group/explore?start=140&tag=社科" >8</a>
<a href="http://www.douban.com/group/explore?start=160&tag=社科" >9</a>
<span class="next">
<link rel="next" href="http://www.douban.com/group/explore?start=20&tag=社科"/>
<a href="http://www.douban.com/group/explore?start=20&tag=社科" >后页></a>
</span&g

本文介绍了如何在Scrapy中使用BaseSpider实现多页面抓取,以豆瓣小组为例,通过提取分页地址并封装为Request进行回调。虽然每个分页地址会被多次返回,但Scrapy内部进行了去重处理,避免了死循环,保证了爬取的正确性。相较于CrawlSpider的Rule,直接使用BaseSpider的方法相对简单。
最低0.47元/天 解锁文章
2169

被折叠的 条评论
为什么被折叠?



