查看原文
其他

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

小一 小一的学习笔记 2023-01-01
2020,努力做一个无可替代的人!

作者|小一

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



写在前面的话

如果你不喜欢PySpider 的界面式编程框架,那你可以了解一下Scrapy 
小一我在刚开始了解Scrapy 的时候,也有些懵,不知道各个模块是啥意思,甚至不知道项目怎么创建
别笑,正常的事,不过相信你看完这篇应该就都知道了。

关于爬虫框架的介绍和PySpider 的相关概念,可以参考这两篇文章
小白学爬虫-进阶-爬虫框架知多少
小白学爬虫-进阶-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高阶了,可能是因为过了个年,回过头了才发现冷落了它。

好啦,今天没鸽大家,还花时间把文章优化了一下,因为之前写的我看了一遍都没太看懂。
哈哈,该鸽的总会鸽,该来的它总会来,我们下节见!



好巧啊,你也读到这了!    

点个在看让小一看到你

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存