scrapy框架
什么是框架
--就是一个集成了很多功能并且具有很强通用性的一个项目模板
如何学习框架
--专门学习框架封装的各种功能的详细用法
什么是scrapy
--爬虫中封装好的一个明星框架
scrapy功能:
--高性能的持久化存储,异步的数据下载,高性能的数据分析,分布式
scrapy框架的基本使用
环境安装
--pip install scrapy
windows:
-pip install wheel
-下载twisted
-安装twisted
-pip install pywin32
-pip install scrapy
创建一个工程:scrapy startproject xxxPro
cd xxxPro
在spiders子目录中创建一个爬虫文件
-scrapy gensplider spiderName www.xxx.com
执行工程:
-scrapy crawl spiderName
scrapy数据解析
scrapy持久化存储
-基于终端指令:
要求:只可以将parse方法的返回值存储到本地的文本文件中
注意:持久化存储对应的文件文本类型只可以为:json,jsonline,jl,csv,xml
好处:简介高效便捷
缺点:局限性比较强(数据只可以存储到指定后缀的文本文件中)
-基于管道:
编码流程:
-数据解析
-在item类中定义相关的属性
-将解析的数据封装存储到item类型的对象
-将item类型的对象提交给管道进行持久化存储的操作
-在管道类的process_item中要将其接收到的item对象中存储的数据进行持久化存储操作
-在配置文件中开启管道
好处:
-通用性强
爬取到数据存储到本地数据库
-管道文件中一个管道类对应的是将数据存储到一个平台
-爬虫文件提交的item只会给管道文件中第一个执行的管道类接受
-process_item中return item表示将item传递给下一个即将被执行的管道类
基于spider的全站数据爬取
-就是将网站中某模板下的全部网页码对应的页面数据进行爬取
-需求:爬取校花网中的照片名称
实现方式:
-将所有页面的url添加到start_urls列表中(不推荐)
-自行手动进行请求发送(推荐)
手动请求发送:
-yield scrapy.Request( url,callback )
callback专门用做于数据解析
五大核心组件:
引擎(Scrapy)
用来处理整个系统的数据流处理,触发事务(框架核心)
调度器(Scheduler)
用来接受引擎发过来的请求,压入队列中,并在引擎最次请求的时候返回,可以想象成一个URL(抓取网页的网址或者说是链接)的优先队列,
有它来决定下一个要抓取的网址是什么,同时去除重复的网址
下载器(Downloader)
用于下载网页内容,并将网页内容返回给蜘蛛(Scrapy下载器是建立在twisted这个高效的异步模型上的)
爬虫(Spiders)
爬虫是主要干活的,用于从特定的网页中提取自己需要的信息,即所谓的实体(Item),用户也可以从中提取链接,让Scrapy继续抓取下一个页面
项目管道(Pipeline)
负责处理爬虫从网页中抽取的实体,主要的功能是持久实体、验证实体的有效性、消除不需要的信息。当页面被爬虫解析后,
将被发送到该项目管道,并经过几个特定的次序处理数据
scrapy五大核心组件之间的工作流程:
1、首先,我们最原始的起始url是我们爬虫文件中的,通常情况下,起始的url只有一个,当我们的爬虫文件执行的时候,首先对起始url发送
请求,将起始url封装成了请求对象,将请求对象传递给了引擎,引擎就收到了爬虫文件给它发送的封装了起始url的请求对象。我们在爬虫
文件中发送的请求并没有拿到响应(没有马上拿到响应),只有请求发送到服务端,服务器端返回响应,才能拿到响应
2、引擎拿到这个请求对象以后,有将请求对象发送给了调度器,队列接收到的请求都放到了队列当中,队列中可能存在多个请求对象,
然后通过过滤器,去掉重复的请求
3、调度器将过滤后的请求对象发送给了引擎
4、引擎将拿到的请求对象给了下载器
5、下载器拿到请求后将请求拿到互联网进行数据下载
6、互联网将下载好的数据发送给下载器,此时下载好的数据是封装在响应对象中的
7、下载器将响应对象发送给引擎,引擎接收到了响应对象,此时引擎中存储了从互联网下载的数据
8、最终,这个相应对象又由引擎给了spider(爬虫文件),由parse方法中的response对象来接收,然后最parse方法中进行解析数据,
此时可能解析到新的url,然后最次发送请求;也可能解析到相关的数据,然后将数据进行封装到item
9、spider将item发送给引擎
10、引擎将item发送给管道