Scrapy是什么
Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。**
如何安装Scrapy
pip install scrapy 2.3.0 (在Window10环境下,可能会出现 gzip解码错误)
pip install scrapy 2.1.0 (建议安装版本)
如果安装有错误!!!!
pip install Scrapy
building ‘twisted.test.raiser’ extension
error: Microsoft Visual C++ 14.0 is required. Get it with “Microsoft Visual C++ Build Tools”: http://landinghub.visualstudio.com/visual-cpp-build-tools
解决方案:
http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
下载twisted对应版本的whl文件(如我的Twisted-17.5.0-cp36-cp36m-win_amd64.whl),cp后面是python版本,amd64代表64位,运行命令:
pip install C:\Users…\Twisted-17.5.0-cp36-cp36m-win_amd64.whl
pip install Scrapy
Scrapy框架核心组件(框架组成)
-
engine 引擎
- 负责其他四个组件的交互.
- 自动运行,无需关注,会自动组织所有的请求对象,分发给下载器
-
spider 爬虫类
-
启动爬虫的入口(发起起始的请求)/请求成功之后的数据解析/解析过程的产出item和request
-
scrapy.Spider 普通的爬虫类的父类
-
scrapy.CrawlSpider 可设置规则的爬虫类、Rule规则类
-
开始函数 start_requests()
-
-
scheduler 调度器
-
接收engine传入的请求,根据调度规则(考虑优先级), 产出一个request给engine.
-
有自己的调度规则,无需关注
-
-
downloader 下载器
-
从引擎处获取到请求对象后,请求数据
-
接收engien从调度器获取的请求request, 并开始下载,下载成功之后,产出给engine
-
-
itempipeline 数据管道
-
处理engien从爬虫类中接收到解析数据item, 并进行处理.
-
清理HTML数据
-
验证爬取的数据
-
查重并将重复的数据丢弃
-
将爬取结果保存到数据库中
-
对图片数据进行下载
-
-
中间件
- 爬虫中间件
- 下载中间件
工作原理
工作流程
- 爬虫引擎获得初始请求开始抓取
- 爬虫引擎开始请求调度程序,并准备对下一次的请求进行抓取
- 爬虫调度器返回下一个请求给爬虫引擎
- 爬虫引擎将数据发送给下载中间件的process_request()方法(注:setting中将DOWNLOADER_MIDDLEWARES打开的情况下)
- 下载中间件将处理后的请求发送到下载器,下载网络数据
- 下载器完成页面下载,将下载结果返回给下载中间件的process_response()方法 (注:setting中将DOWNLOADER_MIDDLEWARES打开的情况下)
- 下载中间件将处理后的数据返回给爬虫引擎
- 引擎将下载器的响应数据返回给爬虫中间件SPIDER_MIDDLEWARES处理数据(注:setting中SPIDER_MIDDLEWARES打开的情况下)
- 爬虫中间件将响应的数据返回给爬虫进行处理
- 爬虫类处理响应,将处理后的数据返回给爬虫中间件SPIDER_MIDDLEWARES处理数据(注:setting中SPIDER_MIDDLEWARES打开的情况下)
- 爬虫中间件返回处理后的items,以及新的请求给引擎
- 引擎发送处理后的items到项目管道,然后吧处理结果返回给调度器,调度器计划处理下一个请求抓取
- 重复该过程,直到爬取完所有的url请求
scrapy使用方法
scrapy常用命令
- scrapy startproject 项目名 --->创建项目
- scrapy genspider 爬虫名 域名 ---> 创建爬虫
- scrapy genspider -t crawl 爬虫名 域名 ---> 创建规则爬虫
- scrapy crawl 爬虫名 -o 文件名 ---> 导出文件
- scrapy crawl 爬虫名 ---> 启动爬虫
- scrapy shell [url] ---> 终端执行
scrapy.response对象
response 是 scrapy.http.HtmlResponse类对象
包含的属性:
方法
- css() ---> 通过HTML中css属性对数据解析
- xpath() ---> 返回Selector对象,通过HTML标签路径对数据解析
- json()
- copy()
用于获取Selector对象的内容
- extract() ---> 返回list
- extract_first() ---> 提前第一条内容
属性
- encoding ---> 字符集,不能直接修改
- url ---> 响应路径
- headers ---> 响应头
- body ---> 字节数据
- status ---> 响应
- text ---> 文本消息
- meta ---> 接收到Request()中的meta属性向解析函数传递数据(元数据)
- request ---> 响应请求
scrapy.Request()初始化的参数
- url ---> 请求路径
- method ---> 请求方法
- headers ---> 请求头
- cookies ---> 缓存
- body ---> 请求体
- meta ---> meta属性可以向下一个解析函数传递数据(元数据),是dict字典格式,value不能是一个引用对象
- dont_filter ---> dont_filter为False表示过滤重复下载的请求,为True则不过滤
- priority ---> 优先级
- callback ---> 回调函数
- encoding ---> 编码格式