python爬虫日记本爬虫专题Pythoner集中营

学会运用爬虫框架 Scrapy (一)

2017-09-16  本文已影响917人  猴哥爱读书
图片来自 unsplash

对于规模小、爬取数据量小、对爬取速度不敏感的爬虫程序, 使用 Requests 能轻松搞定。这些爬虫程序主要功能是爬取网页、玩转网页。如果我们需要爬取网站以及系列网站,要求爬虫具备爬取失败能复盘、爬取速度较高等特点。很显然 Requests 不能完全满足我们的需求。因此,需要一功能更加强大的第三方爬虫框架库 —— Scrapy

1 简介 Scrapy

Scrapy 是一个为了方便人们爬取网站数据,提取结构性数据而编写的分布式爬取框架。它可以应用在包括数据挖掘, 信息处理或存储历史数据等一系列的程序中。因其功能颇多,所以学会它需要一定的时间成本。

1.1 Scrapy 的特性

Scrapy 是一个框架。因此,它集一些各功能强大的 python 库的优点于一身。下面列举其一些特性:

1.2 安装 Scrapy

Scrapy 是单纯用 Python 语言编写的库。所以它有依赖一些第三方库,如lxml, twisted,pyOpenSSL等。我们也无需逐个安装依赖库,使用 pip 方式安装 Scrapy 即可。pip 会自动安装 Scrapy 所依赖的库。随便也说下 Scrapy 几个重要依赖库的作用。

在终端执行以下命令来安装 Scrapy

pip install Scrapy 
# 如果出现因下载失败导致安装不上的情况,可以先启动 ss 再执行安装命令
# 或者在终端中使用代理
pip --proxy http://代理ip:端口 install Scrapy 

你在安装过程中也许会报出安装 Twisted 失败的错误:

running build_ext
building 'twisted.test.raiser' extension
error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": http://landinghub.visualstudio.com/visual-cpp-build-tools
----------------------------------------
Failed building wheel for Twisted
Running setup.py clean for Twisted
Failed to build Twisted

原因是 Twisted 底层是由 C 语言编写的,所以需要安装C语言的编译环境。对于Python3.5来说,可以通过安装 Visual C++ Build Tools 来安装这个环境。打开上面报错文本中的链接,下载并安装 visualcppbuildtools_full 。等安装完成,再执行安装 Scrapy 命令。

安装成功之后如下图:


点击查看大图

2 初探 Scrapy

2.1 Scrapy 项目解析

Scrapy 新建项目需通过命令行操作。在指定文件夹中,打开终端执行以下命令:

scrapy  startproject  项目的名字

我新建一个名为 scrapy_demo,执行结果如下。


点击查看大图

使用 Pycharm 打开该项目,我们会发现项目的层级架构以及文件。


这些文件的作用是:

2.2 Scrapy 的架构

我们刚接触到新事物,想一下子就熟悉它。这明显是天方夜谭。应按照一定的顺序层次、逐步深入学习。学习 Scrapy 也不外乎如此。在我看来,Scrapy 好比由许多组件拼装起来的大机器。因此,可以采取从整体到局部的顺序学习 Scrapy。下图是 Scrapy 的架构图,它能让我们对 Scrapy 有了大体地认识。后续的文章会逐个介绍其组件用法。

点击查看大图

我按照从上而下,从左往右的顺序阐述各组件的作用。

2.3 Scrapy 工作机制

我们对 Scrapy 有了大体上的认识。接下来我们了解下 Scrapy 内部的工作流程。同样先放出一张图,然后我再细细讲解。

点击查看大图
  1. 当引擎(Engine) 收到 Spider 发送过来的 url 主入口地址(其实是一个 Request 对象, 因为 Scrapy 内部是用到 Requests 请求库),Engine 会进行初始化操作。

  2. Engine 请求调度器(Scheduler),让 Scheduler 调度出下一个 url 给 Engine。

  3. Scheduler 返回下一个 url 给 Engine。

  4. Engine 将 url通过下载中间件(请求(request)方向)转发给下载器(Downloader)。

  5. 一旦页面下载完毕,Downloader 生成一个该页面的Response,并将其通过下载中间件(返回(response)方向)发送给 Engine

  6. 引擎将从下载器中接收到 Response 发送给Spider处理。

  7. Spider 处理 Response 并返回爬取到的 Item 及新的 Request 给引擎。

  8. Engine 将 Spider 返回的爬取到的 Item 转发给Item Pipeline,顺便也将将 Request 给调度器。

  9. 重复(第2步)直到调度器中没有更多地request,引擎关闭该网站。


系列文章:
学会运用爬虫框架 Scrapy (二)
学会运用爬虫框架 Scrapy (三)
学会运用爬虫框架 Scrapy (四) —— 高效下载图片
学会运用爬虫框架 Scrapy (五) —— 部署爬虫

推荐阅读:
“干将莫邪” —— Xpath 与 lxml 库
爬虫实战二:爬取电影天堂的最新电影
爬虫与反爬虫的博弈
爬虫系列的总结


上一篇下一篇

猜你喜欢

热点阅读