Scrapy 入门学习笔记(1) -- Scrapy 项目搭建与架构介绍
来源:互联网 发布:国史大纲 版本 知乎 编辑:程序博客网 时间:2024/06/15 12:00
最近学习用 Scrapy 框架写爬虫,简单来说爬虫就是从网上抓取网页,解析网页,然后进行数据的存储与分析,将从网页的解析到数据的转换存储。将学习过程中用到的解析技术,Scrapy 的各个模块使用与进阶到分布式爬虫学到的知识点、遇到的问题以及解决方法记录于此,以作总结与备忘,也希望对需要的同学有所帮助。
本篇文章作为开篇,主要介绍 Scrapy 项目以及爬虫的创建,也简要概述了 Scrapy 项目各个部分的作用以及大致的执行流程。
一. Scrapy 项目创建与介绍
首先是 Scrapy 的安装,这里直接使用 pip 进行安装即可
pip install scrapy
安装完成后就可以使用 scrapy 命令来创建项目了,如下:
scrapy startproject FirstSpider
上面的命令只是生成了一个 Scrapy 项目,之后还需要创建爬虫才能爬取,创建爬虫的命令如下:
scrapy genspider stack http://stackoverflow.com/
使用 scrapy genspider 来创建一个爬虫,并且指定名称为 stack, 起始爬取路径为 http://stackoverflow.com/
创建完成后的项目目录结构如下:
可以看到在项目目录下会有一个与项目名同名的 FirstSpider 包,里面是我们 Scrapy 项目的各个模块。下面对项目的每个部分做简要解释:
- spiders/
顾名思义就是爬虫的 package。我们创建的爬虫文件都会自动生成在该 package 下, 可以看到之前创建的 stack 已经在这里了。
- items.py
用来存放 Item 类的文件,Item 类可以理解为数据的中转类,我们爬取网页后需要将进行解析,并将解析后的数据进行存储分析。为了便于数据的迁移存储,我们可以将数据封装为一个 Item 类,然后在对 Item 类进行操作,这样可以避免很多不必要的错误。
- middlewares.py
中间层文件, Scrapy 自带的 middleware 可以分为 spider middleware 和 downloader middleware 两类, 我们也可以自定义 middleware 类。我们爬取网页的网络请求和响应都会经过 middleware 进行处理, 因此可以在这里做一些个性化的操作,比如设置用户代理,设置代理 IP 等。
- piplines.py
用来处理保存数据的模块,我们爬取网页后解析生成的 Item 类会被传递到这里进行存储解析等操作。 Scrapy 提供了许多有用的 Pipeline 类来处理数据,我们也可以自定义 Pipeline 类进行处理。
- settings
Scrapy 项目的配置文件,对整个项目进行设置。比如设置请求和响应的中间层,指定操作数据的 Pipeline 类等。
介绍完了各个模块之后让我们在看一下刚才创建的爬虫文件,其源代码如下:
import scrapyclass StackSpider(scrapy.Spider): name = "stack" allowed_domains = ["http://stackoverflow.com/"] start_urls = ['https://www.baidu.com/'] # 默认的解析方法,可以自己定义其他解析方法解析对应的请求 def parse(self, response): html = response.text print(html) pass # 指定起始请求,生成一个 scrapy.Request() 请求对象 def start_requests(self): yield scrapy.Request(url='http://stackoverflow.com/', callback=self.parse)
可以看到我们指定的爬虫名和起始 url 都在里面。默认生成的代码是没有 start_requests 方法的,我们在命令中添加的起始网址会被声明为 start_urls 中的元素。Scrapy 将 start_urls 中的 url 作为起始路径进行爬取。除此之外我们可以重写 Scrapy 提供的 start_requests() 方法来发送 scrapy.Request 请求自行设定。
如代码中所示,我们自定义了 start_requests 方法生成了一个 scrapy.Request 请求,并指定了请求 url 和回调函数,callback 默认值是调用 parse 方法,我们也可以自定义其他解析方法来针对不同的网页爬取请求做解析。
之后就是执行爬虫进行爬取了,其命令 为 scrapy crawl + 爬虫名,如下:
scrapy crawl stack
爬取成功后会将 response 对象传递到我们指定的解析方法中进行解析,这样一个爬虫就创建运行成功了。如代码所示,我们获取了 response.text 属性,会返回其页面的 HTML 代码。
通过网页解析的技术我们可以获取页面中任何我们需要的数据,关于解析的技术将在下一篇文章中讲解,现在简要讲解下 Scrapy 的架构以及执行流程,结合前面各个模块的讲解帮助大家对 Scrapy 有个宏观的印象,便于后面的学习。
二. Scrapy 爬虫执行流程概述
Scrapy 架构图如下:
从上面的架构图中可以看到我们熟悉的几个模块,包括 Spiders、Item、middleware、pipeline 模块。另外还多了 ENGIN 引擎、SCHEDULER 和 DOWNLOADER 下载模块。
下面结合图中的各个流程做简要讲解:
- Spider 爬虫部分发送请求,通过 spidermiddleware 中间层处理后发送给 ENGINE 引擎模块
- 引擎模块将请求发送给 SCHEDULER 模块进行调度
- SCHEDULER 模块将可以执行的请求调度给引擎模块
- 引擎模块将请求发送给 DOWNLOADER 下载模块进行下载,期间会经过 download middleware 进行处理
- 下载模块将爬取好的网页响应经过 downloadermiddleware 中间层处理后传递给引擎模块
- 引擎模块将响应传递给 Spider 爬虫模块
- 在爬虫模块我们自定义解析方式对响应解析完成后生成 Item 对象或者新的 Request对象,经过 spiddermiddleware 发送给引擎模块
- 如果是 Item 对象传递给 item 和 pipeline 来进行对应的处理; 如果是 Request 对象则继续调度下载,重复之前的步骤。
上面就是整个 Scrapy 的执行流程了,了解了大致的流程后,后面就是对各个流程中的知识点进行学习了,包括网页的解析,请求响应的中间层处理,item 与 pipeline 对数据的处理以及可能遇到的问题以及解决方案,将在后面的文章中逐个讲解,梳理内容,巩固所学,也希望对需要的同学有所帮助。
- Scrapy 入门学习笔记(1) -- Scrapy 项目搭建与架构介绍
- 【scrapy】学习Scrapy入门
- <scrapy>scrapy入门学习
- 【scrapy】学习Scrapy入门
- Scrapy学习笔记(1)
- Scrapy学习笔记(1)初探Scrapy
- Scrapy框架学习(一)----Scrapy介绍及第一个项目
- scrapy学习笔记--scrapy命令
- 《Learning Scrapy》1 Scrapy介绍
- Scrapy 入门项目
- 学习笔记python入门-安装Scrapy
- Scrapy入门(二)创建Scrapy项目
- Scrapy学习笔记2-新建卧项目
- 【Scrapy】学习记录1_一个基本的Scrapy项目
- Scrapy入门学习
- Python scrapy学习入门
- 学习Scrapy入门
- 学习Scrapy入门
- Anaconda使用总结
- 目标检测的图像特征提取之(二)LBP特征
- InnoDB存储引擎
- 【DOM】(2)对于dom树中的增删改查---查
- 目标检测的图像特征提取之(三)Haar特征
- Scrapy 入门学习笔记(1) -- Scrapy 项目搭建与架构介绍
- 开源 java CMS
- 计算机视觉目标检测的框架与过程
- ie兼容性问题的
- cocos2dx中CCNode下的remove函数积累
- 脚本语言和变易语言的区别
- C#中数据类型的尝试转换
- 英语音标学习
- Spring