2020,努力做一个无可替代的人!
作者|小一
全文共2190字,阅读全文需8分钟
写在前面的话
如果你不喜欢PySpider 的界面式编程框架,那你可以了解一下Scrapy
小一我在刚开始了解Scrapy 的时候,也有些懵,不知道各个模块是啥意思,甚至不知道项目怎么创建
别笑,正常的事,不过相信你看完这篇应该就都知道了。
关于爬虫框架的介绍和PySpider 的相关概念,可以参考这两篇文章
正文
什么是Scrapy?
Scrapy 是一个基于 Twisted 的异步处理框架,是纯 Python 实现的爬虫框架,其架构清晰,模块之间的耦合程度低,可扩展性极强,可以灵活完成各种需求。
先来看一张结构图:
Scrapy 可以分为如下的几个部分
Engine,引擎
,用来处理整个系统的数据流处理,触发事务,是整个框架的核心。Item,项目
,它定义了爬取结果的数据结构,爬取的数据会被赋值成该对象。Scheduler, 调度器
,用来接受引擎发过来的请求并加入队列中,并在引擎再次请求的时候提供给引擎。Downloader,下载器
,用于下载网页内容,并将网页内容返回给蜘蛛。Spiders,蜘蛛
,其内定义了爬取的逻辑和网页的解析规则,它主要负责解析响应并生成提取结果和新的请求。Item Pipeline,项目管道
,负责处理由蜘蛛从网页中抽取的项目,它的主要任务是清洗、验证和存储数据。Downloader Middlewares,下载器中间件
,位于引擎和下载器之间的钩子框架,主要是处理引擎与下载器之间的请求及响应。Spider Middlewares, 蜘蛛中间件
,位于引擎和蜘蛛之间的钩子框架,主要工作是处理蜘蛛输入的响应和输出的结果及新的请求。
说白了就是把所有爬虫相关的东西都封装起来,你要用的时候内部会自己调用,你只需要处理好你的爬虫逻辑就行
明白了架构再来看一下在Scrapy 中爬虫的流程是什么样的
Scrapy 数据流
Scrapy 中的数据流由引擎控制,其过程如下:
Engine 首先打开一个网站,找到处理该网站的 Spider 并向该 Spider 请求第一个要爬取的 URL。
Engine 从 Spider 中获取到第一个要爬取的 URL 并通过 Scheduler 以 Request 的形式调度。
Engine 向 Scheduler 请求下一个要爬取的 URL。
Scheduler 返回下一个要爬取的 URL 给 Engine,Engine 将 URL 通过 Downloader Middlewares 转发给 Downloader 下载。
一旦页面下载完毕, Downloader 生成一个该页面的 Response,并将其通过 Downloader Middlewares 发送给 Engine。
Engine 从下载器中接收到 Response 并通过 Spider Middlewares 发送给 Spider 处理。
Spider 处理 Response 并返回爬取到的 Item 及新的 Request 给 Engine。
Engine 将 Spider 返回的 Item 给 Item Pipeline,将新的 Request 给 Scheduler。
重复第二步到最后一步,直到 Scheduler 中没有更多的 Request,Engine 关闭该网站,爬取结束。
可以看到,通过多个组件的相互协作、不同组件完成不同的工作
Scrapy 可以最大限度地利用了网络带宽,提高了数据爬取和处理的效率,而且对每个功能都进行了相应的封装,可以灵活完成各种需求。
ok,介绍的差不多,你现在脑子里应该有一个大致的流程了
那爬虫框架是如何用代码实现的,继续往下看
Scrapy 安装
pip install scrapy
正常情况下会报错:
Microsoft visual c++ 14.0 is required
对,就是下面这个红的让人心颤的图,其实只是一个小小的问题
解决方法
安装 Microsoft visual c++ 即可。
下载、安装(大概需要五分钟)直接按名称在百度搜索就行了,很好找,就不贴链接了。
安装完成后重复 pip 操作,到这一步基本没啥问题
成功的时候会出现下面这张图
创建 Scrapy 项目
进入 cmd 下 cd 到你的代码所在文件夹,使用命令创建 scrapy 项目:
其中 scrapy_demo 为项目名称
# 创建 scrapy 项目
scrapy startproject scrapy_demo
创建项目成功后如下图:
开始 Scrapy 项目
在 Pycharm 中打开刚才创建的 scrapy 项目
依次选择 File --> Open --> 选择项目所在文件夹
打开后可以看到 scrapy 项目的结构是这样的:
其中,这些文件分别是:
scrapy.cfg
: 项目的配置文件scrapy_demo/
: 该项目的 Python 模块。之后你将在此加入代码;scrapy_demo/items.py
: 项目中的 item 文件,数据的容器;scrapy_demo/pipelines.py
: 项目中的 pipelines 文件,俗称数据管道;scrapy_demo/settings.py
: 项目的设置文件;scrapy_demo/spiders/
: 放置 spider 代码的目录。
是不是有点懵,如果你是第一次接触 scrapy 项目那懵就对了。
不要怀疑自己,我们来详细看一下每个文件是干嘛的。
items.py
Item 是保存爬取到的数据的容器,其使用方法和python字典类似
pipelines.py
数据管道,你可以理解成是在item 外面包着的一层管道,用来对item 进行相关操作。
比如:
清洗过滤item 数据
验证数据、检查数据是否已存在
将爬取结果保存到数据库中
settings.py
设置文件,这里可以存放你项目的一些固定的参数设置。
比如:
数据库连接的参数设置
爬虫的参数设置
管道的参数设置
欢迎补充…
基础内容差不多就这些,就像前一节说到的PySpider 一样,过一遍流程应该没啥问题
但是真正要用起来,还得多做实战项目
有一句话怎么说来着:基础不够,实战来凑?
写在后面的话
emmm,坦白一下。
其实,今天准备鸽的,毕竟我图片都找好了
要不是我在文档目录里面发现了这篇存货,我可能就
……
这篇文章写的挺早的,大概是在两个月前,那会刚写完爬虫基础,当时本意是一股脑把爬虫搞定了,后面不知道为啥又去手撕Python高阶
了,可能是因为过了个年,回过头了才发现冷落了它。
好啦,今天没鸽大家,还花时间把文章优化了一下,因为之前写的我看了一遍都没太看懂。
哈哈,该鸽的总会鸽,该来的它总会来,我们下节见!
好巧啊,你也读到这了!
点个
在看
让小一看到你