(技术笔记)关于scrapy的一些学习与思考(基础篇)
前言
关于爬虫这块,以前都是凭着兴趣,零零碎碎捯饬的,第一份工作也是做的java开发;但今年因为第二份工作的原因,几乎日夜都在搞爬虫,接触和学习了很多,但一直都只是碎片化的学习,最近在对系统进行优化的时候,发现自己很多东西已经记忆模糊了,或者不熟悉,因此需要对scrapy进行一个系统性的学习和整理,因此便整理出一份文档,作为个人的学习笔记。
Scrapy简介
- Scrapy是一个快速且高级的网页爬虫爬取框架,用于爬取网站与提取结构化数据。
- Scrapy 使用了 Twisted异步网络框架来处理网络通讯,可加快下载速度,且包含了各种中间件接口,可以灵活的完成各种需求。
- 与requests对比:
- Scrapy 是框架,该框架是封装的,包含 request (异步调度和处理)、下载器(多线程的 Downloader)、解析器(selector)和 twisted(异步处理)等,因此不够灵活;
- requests 是一个功能十分强大的py库,能满足大部分网页数据获取的需求。其工作原理是向服务器发送数据请求,至于数据的下载和解析,都需要自己处理,灵活性较高;
Scrapy架构

Scrapy Engine(引擎): 框架的核心,负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。
Scheduler(调度器): 负责接受引擎发送过来的Request请求,并按照一定的方式排列,入队,当引擎需要时,交还给引擎。
Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理,
Spider(爬虫):爬虫,定义了爬取的逻辑和网页内容的解析规则,主要负责解析响应并生成结果和新的请求
Item Pipeline(管道):项目管道,它负负责处理spider从网页中抽取的数据,主要是负责清洗,验证和向数据库中存储数据
Downloader Middlewares(下载中间件):下载中间件,是处于Scrapy的Request和Requesponse之间的处理模块,可以自定义扩展下载功能的组件。
Spider Middlewares(Spider中间件):spider中间件,位于引擎和spider之间的框架,主要处理spider输入的响应和输出的结果及新的请求middlewares.py里实现
Scrapy命令
| 命令 | 说明 | 格式 |
|---|---|---|
| startproject | 创建新工程 | scrapy startproject<name>[dir] |
| genspider | 创建一个爬虫 | scrapy genspider[options]<name> <domain> |
| settings | 获得爬虫配置信息 | scrapy settings [options] |
| crawl | 运行爬虫 | scrapy crawl <spider> |
| list | 列出工程中所有爬虫 | scrapy list |
| shell | 启动URL调试命令行 | scrapy shell [URL] |
Scrapy项目结构
- 以自己的sync_order模块为例:

- scrapy.cfg: 部署爬虫项目的配置文件
- sync_order: 自定义项目sync_order的python模块。
- sync_order/items.py: 项目中的item文件.在此定义需要要抽取的Item对象
- sync_order/pipelines.py: 项目中的管道文件.对数据进行抽取清洗存储的
- sync_order/settings.py: 项目的设置文件.
- sync_order/spiders/: 放具体spider代码的目录
- sync_order/middlewars.py 爬虫项目的中间件

浙公网安备 33010602011771号