小白学爬虫-进阶-你知道Scrapy吗?

2020,努力做一个无可替代的人!

作者|小一

05df878a9bcbd05abcd97a43673be23a.png

全文共2190字,阅读全文需8分钟

写在前面的话

如果你不喜欢PySpider 的界面式编程框架,那你可以了解一下Scrapy 

小一我在刚开始了解Scrapy 的时候,也有些懵,不知道各个模块是啥意思,甚至不知道项目怎么创建

别笑,正常的事,不过相信你看完这篇应该就都知道了。

关于爬虫框架的介绍和PySpider 的相关概念,可以参考这两篇文章

小白学爬虫-进阶-爬虫框架知多少

小白学爬虫-进阶-PySpider操作指北

正文

什么是Scrapy?

Scrapy 是一个基于 Twisted 的异步处理框架,是纯 Python 实现的爬虫框架,其架构清晰,模块之间的耦合程度低,可扩展性极强,可以灵活完成各种需求。

先来看一张结构图:

cb17ae87644123ab0c61b1b499847697.png

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

对,就是下面这个红的让人心颤的图,其实只是一个小小的问题

dc9e85b66ed725306d87bdfa12e5ae66.png

解决方法

安装 Microsoft visual c++ 即可。

下载、安装(大概需要五分钟)直接按名称在百度搜索就行了,很好找,就不贴链接了。

078900f726937f54e130082171b55db3.png

安装完成后重复 pip 操作,到这一步基本没啥问题

成功的时候会出现下面这张图

73d69c528d0b7a04951fe662961b3dba.png

创建 Scrapy 项目

进入 cmd 下 cd 到你的代码所在文件夹,使用命令创建 scrapy 项目:

其中 scrapy_demo 为项目名称

# 创建 scrapy 项目
scrapy startproject scrapy_demo

创建项目成功后如下图:

5129aa1705a46c61036e4503b02c302c.png

开始 Scrapy 项目

在 Pycharm 中打开刚才创建的 scrapy 项目

依次选择 File --> Open --> 选择项目所在文件夹

打开后可以看到 scrapy 项目的结构是这样的:

878ed26c4561c83de55f30e3d6935ab5.png

其中,这些文件分别是:

  • 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,坦白一下。

其实,今天准备鸽的,毕竟我图片都找好了

e363f0d87dacc56607d7453e063ccfd3.png

要不是我在文档目录里面发现了这篇存货,我可能就……

这篇文章写的挺早的,大概是在两个月前,那会刚写完爬虫基础,当时本意是一股脑把爬虫搞定了,后面不知道为啥又去手撕Python高阶了,可能是因为过了个年,回过头了才发现冷落了它。

好啦,今天没鸽大家,还花时间把文章优化了一下,因为之前写的我看了一遍都没太看懂。

哈哈,该鸽的总会鸽,该来的它总会来,我们下节见!

好巧啊,你也读到这了!    

点个在看让小一看到你768d38a73b069dea3b988c84f45c957d.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值