Spider、xmlSpider、FeedSpider、CrawlSpider、RedisSpider分别作用

  • Spider
    •   classscrapy.spider.Spider

    Spider是最简单的spider,也是scrapy的模板类的basic模板所对应的spider,直接想通过scrapy genspider模板生成实例代码,就是这个模板生成的哦,查询scrapy的模板都有什么的话,scrapy genspider -l即可。每个其他的spider必须继承自该类(包括Scrapy自带的其他spider以及您自己编写的spider)。 Spider并没有提供什么特殊的功能。 其仅仅请求给定的 start_urls/start_requests ,并根据返回的结果(resulting responses)调用spider的 parse 方法。对于一些比较规则的网站,我们似乎可以用Spider类去应付。比如:一个有列表(list),有详情(detail)页的页面,你可以直接先parse列表页,再递归去获取详情页的内容,这种方法,就是简单粗暴。

  • XmlSpider
    •   classscrapy.contrib.spiders.XMLFeedSpider

    xmlSpider类,是建立爬虫的另外一个类。XMLSpider被设计用于通过迭代各个节点来分析XML源(XML feed)。 迭代器可以从 iternodes , xml , html 选择。 鉴于 xml 以及 html 迭代器需要先读取所有DOM再分析而引起的性能问题, 一般还是推荐使用 iternodes 。 不过使用 html 作为迭代器能有效应对错误的XML。这个应用不多,官方文档上也有相应的介绍,感兴趣的可以看看文档即可。

  • CSVSpider
    • classscrapy.contrib.spiders.CSVFeedSpider

    该spider除了其按行遍历而不是节点之外其他和XMLFeedSpider十分类似。主要处理的数据的格式不一样,这个主要处理CSV格式的数据文件。这儿就不多介绍了,感兴趣的也去查查手册吧。

  • SitemapSpider
    • class scrapy.contrib.spiders.SitemapSpider

    SitemapSpider使您爬取网站时可以通过 "站点地图" 来发现爬取的URL。其支持嵌套的sitemap,并能从 robots.txt 中获取sitemap的url。站点地图,就是一般的站长为了方便搜索引擎的抓取,通过特定的方式或规划生成一定的xml站点地图文件,供搜索引擎抓取,这个spider就是利用此文件实现相应内容的抓取和分析。

  • CrawlSpider
    • class scrapy.contrib.spiders.CrawlSpider

    这个spider爬取一般网站常用的网站,其特色是定义了一些规则(rule)来提供跟进link的方便的机制,其对很多情况都使用。比如:全站抓取,这个是最常用的。想抓取什么内容,可以直接定义规则,该spider会自动从start_urls里去抽取相应规则的url,并下载。供Rule里的回调函数来抽取内容处理。在rules中包含一个或多个Rule对象,每个Rule对爬取网站的动作定义了某种特定操作,比如提取当前相应内容里的特定链接,是否对提取的链接跟进爬取,对提交的请求设置回调函数等。这个功能很强大,也很方便。

  • RedisSpider
    • class RedisSpider(RedisMixin, Spider)

    该Spider继承自Spider.最主要的应该就是支持分布式爬虫,请求的持久化,去重的持久化。start_urls没有了,多了redis_key ,往redis_key存入start_url地址才能启动,settings 中多了几行配置。

  • RedisCrawlerSpider
    • class RedisCrawlSpider(RedisMixin, CrawlSpider):

    此spider是比较强大的。该Spider继承自CrawlSpider,具有CrawlSpider的一切功能。不同的是这个Spicer支持分布式爬虫,请求的持久化,去重的持久化。start_urls没有了,多了redis_key ,往redis_key存入start_url地址才能启动,settings 中多了几行配置。因为采用的是crawlSpider,所以需要遵守Rule规则,以及callback不能写parse()方法。

  常用的基本是这些Spider。更强大的功能,还需要更进一步的挖掘!

 

原文地址:https://www.cnblogs.com/jessicor/p/12060960.html