我们已经讲解的爬虫都是抓取一个或几个页面,然后分析页面中的内容,这种爬虫可以称为专用爬虫,通常是用来抓取特定页面中感兴趣的内容,例如,某个城市的天气预报信息,或特定商品的信息等。除了专业爬虫外,还有一类爬虫应用非常广泛,这就是通用爬虫。这种爬虫需要抓取的页面数量通常非常大。例如,像Google、百度这样的搜索引擎就是使用这种通用爬虫抓取了整个互联网的数据,然后经过复杂的处理,最终将处理过的数据保存到分布式数据库中,我们通过搜索引擎查到的最终结果其实是经过整理后的数据,而数据的最初来源是利用通用爬虫抓取的整个互联网的数据。但对于大多数人来说,是没必要抓取整个互联网的数据的,即使抓取了,这么大量的数据也没有那么多硬盘来存放。不过为了研究通用爬虫,可以选择抓取某个网站的满足一定规则的数据,本节就会利用通用爬虫抓取网站中的新闻数据,但在讲解如何实现抓取新闻的通用爬虫之前,先要介绍两个重要的工具:CrawlSpider和Item Loader。
1. CrawlSpider
CrawlSpider是Scrapy提供的一个通用爬虫。CrawlSpider是一个类,我们编写的爬虫类可以直接从CrawlSpider派生。CrawlSpider类可以通过指定一些规则让爬虫抓取页面中特定的内容,这些规则需要通过专门的Rule指定。Rule里包含了提取和根据页面的配置,爬虫会根据Rule来确定当前页面中哪些Url需要提取,以及是否要继续抓取这些Url对应的Web页面。
CrawlSpider类从Spider类继承,除了拥有Spider类的所有方法和属性外,还提供了一个非常重要的属性和一个方法。