CrawlSpider其实是Spider的一个子类,除了继承到Spider的特性和功能外,还派生除了其自己独有的更加强大的特性和功能。比如如果你想爬取知乎或者是简书全站的话,CrawlSpider这个强大的武器就可以爬上用场了,说CrawlSpider是为全站爬取而生也不为过。
Spider是一个Scrapy提供的基本类,Scrapy中包含的其他基本类(例如CrawlSpider)以及自定义的spider都必须继承这个类。• Spider是定义如何抓取某个网站的类,包括如何执行抓取以及如何从其网页中提取结构化数据。所有爬虫的基类,用户定义的爬虫必须从这个类继承
在 Scrapy 中要抓取和解析一些逻辑内容和提取网站的链接,其实都是需要在 Spider 中完成的。在上一篇文章中我们介绍了Scarpy框架的简单使用,后面一些文章我们要陆续介绍框架里面的Spider、配置、管道、中间件等。scrapy 框架分为spider爬虫和CrawlSpider(规则爬虫),本篇文章主要介绍Spider爬虫的使用。
框架就是将平常写爬虫的request (异步调度和处理)、下载器(多线程的 Downloader)、解析器(selector)和 twisted(异步处理)封装到了一起,够成了框架。而且使用起来更加方便,爬取速度更快。
动态网页爬虫一般可分为两种:Selenium爬取和接口爬取。两种方式各有优缺点:前者我们己经介绍了selenium的使用和验证码、滑块的使用,其虽然可以很好地处理网页异步加载问题,但面对大型爬虫任务时,效率还是比较低的;后者虽然爬取速度较快,但请求参数很可能是动态变化的,这时就需要利用一些前端的知识,重新构造参数,整个过程通常称为JS逆向。先来看一下简单的请求: