当前位置:   article > 正文

爬虫框架Scrapy(1)Scrapy框架安装与项目开发_第1关:scarpy安装与项目创建

第1关:scarpy安装与项目创建

一. Scrapy框架简介

Scrapy是一个使用Python语言(基于Twisted框架)编写的开源网络爬虫框架,目前由 Scrapinghub Ltd 维护。Scrapy 简单易用、灵活易拓展、开发社区活跃,并且是跨平台的。在 Linux、MaxOS 以及 Windows 平台都可以使用。Scrapy 应用程序也使用 Python 进行开发,目前可以支持 Python 2.7 以及 Python 3.4+ 版本。

Scrapy 功能非常强大,爬取效率高,相关扩展组件多,可配置和可扩展程度非常高,它几乎可以应对所有反爬网站,是目前 Python 使用最广泛的爬虫框架。

1. Scrapy 框架介绍

首先我们看看 Scrapy 框架的架构:
在这里插入图片描述

它可以分为如下的几个部分:

模块 作用
Engine 引擎,处理整个系统的数据流处理、触发事务,是整个框架的核心
Item 项目,它定义了爬取结果的数据结构,爬取的数据会被赋值成该 Item 对象
Scheduler 调度器,接受引擎发过来的请求并将其加入列中,在引擎再次请求的时候将请求提供给引擎
Downloader 下载器,下载网页内容,并将网页内容返回给蜘蛛
Spiders 蜘蛛,其内定义了爬取的逻辑和网页解析规则,它主要负责解析响应并生成提取结果和新的请求
Item Pipeline 项目管道,负责处理由蜘蛛从网页中抽取的项目,它的主要任务是清洗、验证和存储数据
Downloader Middlewares 下载器中间件,位于引擎和下载器之间的钩子框架,主要处理引擎与下载器之间的请求及响应
Spide Middlewares 蜘蛛中间件,位于引擎和蜘蛛之间的钩子框架,主要处理蜘蛛输入的响应和输出的结果及新的请求

对于用户来说,Spider 是最核心的组件,Scrapy 爬虫开发是围绕实现 Spider 展开的。

2. 数据处理流程

Scrapy 中的数据流由引擎控制,数据流的过程如下:

  • Engine 首先打开一个网站,找到处理该网站的 Spider,并向该 Spider 请求第一个要爬取的 URL;
  • Engine 从 Spider 中获取到第一个要爬取的 URL,并通过 Scheduler 以 Request 的形式调度;
  • Engine 向 Scheduler 请求下一个要爬取的 URL;
  • Scheduler 返回下一个要爬取的 URL 给 Engine,Engine 将 URL 通过 Downloader Middlewares 转发给 Downloader Middlewares 下载;
  • 一旦页面下载完毕,Downloader 生成该页面的 Response,并将其通过 Downloader Middlewares 发送给 Engine;
  • Engine 从下载器中接收到 Response,并将其通过 Spider Middleware 发送给 Spider 处理;
  • Spider 处理 Response,并返回爬取到的 Item 及新的 Request 给 Engine;
  • Engine 将 Spider 返回的 Item给 Item Pipeline,将新 Request 给 Scheduler
  • 重复第 (2) 步到第 (8) 步,直到 Scheduler 中没有更多的 Request,Engine 关闭该网站,爬取结束。

通过多个组件的相互协作、不同组件完成工作的不同、组件对异步处理的支持,Scrap 最大限度地利用了网络带宽,大大提高了数据爬取和处理的效率。

如果把框架中的组件比作人体的各个器官,Request 和 Response 对象便是血液,Item 则是代谢产物。

二. Scrapy 及其依赖库的安装

在任意操作系统下,都可以使用 pip 安装 Scrapy,包括在虚拟机中。下面我们在远程终端进入相应的 env 通过如下命令下载 Scrapy 框架:

(pyspider) pyvip@VIP:~$ pip3 install scrapy
Looking in indexes: https://pypi.douban.com/simple
...
Installing collected packages: scrapy
Successfully installed scrapy-2.4.1
  • 1
  • 2
  • 3
  • 4
  • 5

为确认 Scrapy 已安装成功,在 shell 中测试能否执行 Scrapy 这条命令:

(pyspider) pyvip@VIP:~$ scrapy
Scrapy 2.4.1 - no active project

Usage:
  scrapy <command> [options] [args]

Available commands:
  bench         Run quick benchmark test
  commands      
  fetch         Fetch a URL using the Scrapy downloader
  genspider     Generate new spider using pre-defined templates
  runspider     Run a self-contained spider (without creating a project)
  settings      Get settings values
  shell         Interactive scraping console
  startproject  Create new project
  version       Print Scrapy version
  view          Open URL in browser, as seen by Scrapy

  [ more ]      More commands available when run from project directory

Use "scrapy <command> -h" to see more info about a command
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

通过以上检测,说明 Scrapy 安装成功了。如上所示,我们安装的是当前最新版本2.4.1。

除了上述 Scrapy 库,我们还需要安装其依赖的其他几个第三方库,例如 'lxml'、'Twisted'、'pyOpenSSL' 等。这些第三方库的安装方式可以参考 Scrapy 的安装方式。

除了上述的安装方式,我们可以直接在 Pycharm 的设置里面下载。

三. Scrapy 项目开发流程

首先我们来看看爬虫框架 Scrapy 的常用命令。

1. 常用命令
命令 作用
scrapy startproject <project_name> 在当前目录下创建一个名为<project_name>的项目
scrapy settings [options] 该命令将会输出 Scrapy 默认设定;如果你在项目中运行这个命令将会输出项目的设定值
scrapy runspider <spider_file.py> 在未创建项目的情况下,运行一个编写在 python 文件中的 spider
scrapy shell [url] 以给定的URL(如果给出)或者空(没有给出URL)启动 Scrapy shell
scrapy fetch <url> 使用 Scrapy 下载器 (downloader) 下载给定的URL,并将获取到的内容送到标准输出
scrapy view <url> 在你的默认浏览器中打开给定的 URL,并以Scrapy spider 获取到的形式展现
scrapy version [-v] 输出Scrapy版本
scrapy –help 查看帮助信息
scrapy bench scrapy 基准测试,用于检测 scrapy 安装环境是否完整
scrapy crawl <spider_name> 使用你项目中的 spider 进行爬取,即启动你的项目
crapy check [-l] <spider> 运行 contract 检查,检查你项目中的错误之处
scrapy list 列出当前项目中所有可用的 spider,每行输出一个 spider
scrapy genspider [-t template] <name> <domain> 在当前项目中创建 spider
2. 创建 Scrapy 项目

在安装完成 Scrapy框架之后,我们开始创建第一个 Scrapy 项目,通过这个示例,我们了解一下 Scrapy 框架的开发流程。

创建 Scrapy 框架的过程与 Django 框架中创建项目文件有些相似。初步流程如下:

  • Step1:创建虚拟环境,并创建项目工程文件
  • Step2:安装 Scrapy 框架
  • Step3:在本地文件夹中创建相应的工程文件,然后在 Pycharm 中连接远程工程文件

然后从Ubuntu 或者 Pycharm 中进入到终端,然后在对应的虚拟环境下进入到爬虫项目工程文件夹,然后运行下面的命令:

(pyspider) pyvip@VIP:~/project/Python_Spider/Spider_Project/Simple_Case$ scrapy startproject tutorial
New Scrapy project 'tutorial', using template directory '/home/pyvip/.virtualenvs/pyspider/lib/python3.6/site-packages/scrapy/templates/project', created in:
    /home/pyvip/project/Python_Spider/Spider_Project/Simple_Case/tutorial

You can start your first spider with:
    cd tutorial
    scrapy genspider example example.com
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

创建好一个名为 first_scrapy 的项目后,可使用tree命令查看项目目录下的文件,显示如下:

tutorial
├── tutorial
│   ├── __init__.py
│   ├── items.py
│   ├── middlewares.py
│   ├── pipelines.py
│   ├── settings.py
│   └── spiders
│       └── __init__.py
└── scrapy.cfg
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

这里各个文件的功能描述如下:

  • scrapy.cfg:它是 Scrapy 项目的配置文件,其内定义了项目的配置文件路径、部署相关信息等内容;
  • items.py:它定义 Item 数据结构,所有的 Item 的定义都可以放这里;
  • pipelines.py:它定义 Item Pipeline 的实现,所有的 Item Pipeline 的实现都可以放这里;
  • settings.py:它定义项目的全局配置;
  • middlewares.py:它定义 Spider Middlewares 和 Downloader Middlewares 的实现
  • spiders:其内包含一个个 Spider 的实现,每个 Spider 都有一个文件。
3. 创建 Spider

Spider 是需要自己定义的类, Scrapy 用它来从网页里抓取内容,并解析抓取的结果。不过这个类必须继承 Scrapy 提供的 Spider 类 scrapy.Spider,还要定义 Spider 的名称和起始请求,以及怎样处理爬取的结果的方法。spider 模块我们可以使用命令行来创建,例如我们要生成 Quotes 这个 Spider,可以执行如下命令:

(pyspider) pyvip@VIP:~/project/Python_Spider/Spider_Project/Simple_Case$ cd tutorial/tutorial
(pyspider) pyvip@VIP:~/project/Python_Spider/Spider_Project/Simple_Case/tutorial/tutorial$ ls
__init__.py  items.py  middlewares.py  pipelines.py  __pycache__  settings.py  spiders
$ scrapy genspider quotes quotes.toscrape.com
Created spider 'quotes' using template 'basic' in module:
  tutorial.spiders.quotes
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

执行完毕之后,spiders 文件夹中多了一个 quotes.py,它就是刚刚创建的 Spider,内容如下所示:

import scrapy

class QuotesSpider(scrapy.Spider):
    name = 'quotes'
    allowed_domains = ['quotes.toscrape.com']
    start_urls = ['http://quotes.toscrape.com/']

    def parse(self, response):
        pass
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

这里有三个属性——'name'、'allowed_domains'、' start_urls

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/793104
推荐阅读
相关标签
  

闽ICP备14008679号