赞
踩
Scrapy是一个使用Python语言(基于Twisted框架)编写的开源网络爬虫框架,目前由 Scrapinghub Ltd
维护。Scrapy 简单易用、灵活易拓展、开发社区活跃,并且是跨平台的。在 Linux、MaxOS
以及 Windows
平台都可以使用。Scrapy 应用程序也使用 Python 进行开发,目前可以支持 Python 2.7 以及 Python 3.4+ 版本。
Scrapy 功能非常强大,爬取效率高,相关扩展组件多,可配置和可扩展程度非常高,它几乎可以应对所有反爬网站,是目前 Python 使用最广泛的爬虫框架。
首先我们看看 Scrapy 框架的架构:
它可以分为如下的几个部分:
模块 | 作用 |
---|---|
Engine | 引擎,处理整个系统的数据流处理、触发事务,是整个框架的核心 |
Item | 项目,它定义了爬取结果的数据结构,爬取的数据会被赋值成该 Item 对象 |
Scheduler | 调度器,接受引擎发过来的请求并将其加入列中,在引擎再次请求的时候将请求提供给引擎 |
Downloader | 下载器,下载网页内容,并将网页内容返回给蜘蛛 |
Spiders | 蜘蛛,其内定义了爬取的逻辑和网页解析规则,它主要负责解析响应并生成提取结果和新的请求 |
Item Pipeline | 项目管道,负责处理由蜘蛛从网页中抽取的项目,它的主要任务是清洗、验证和存储数据 |
Downloader Middlewares | 下载器中间件,位于引擎和下载器之间的钩子框架,主要处理引擎与下载器之间的请求及响应 |
Spide Middlewares | 蜘蛛中间件,位于引擎和蜘蛛之间的钩子框架,主要处理蜘蛛输入的响应和输出的结果及新的请求 |
对于用户来说,Spider 是最核心的组件,Scrapy 爬虫开发是围绕实现 Spider 展开的。
Scrapy 中的数据流由引擎控制,数据流的过程如下:
Spider
,并向该 Spider
请求第一个要爬取的 URL;通过多个组件的相互协作、不同组件完成工作的不同、组件对异步处理的支持,Scrap 最大限度地利用了网络带宽,大大提高了数据爬取和处理的效率。
如果把框架中的组件比作人体的各个器官,Request 和 Response 对象便是血液,Item 则是代谢产物。
在任意操作系统下,都可以使用 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
为确认 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
通过以上检测,说明 Scrapy
安装成功了。如上所示,我们安装的是当前最新版本2.4.1。
除了上述 Scrapy 库,我们还需要安装其依赖的其他几个第三方库,例如 'lxml'、'Twisted'、'pyOpenSSL'
等。这些第三方库的安装方式可以参考 Scrapy
的安装方式。
除了上述的安装方式,我们可以直接在 Pycharm 的设置里面下载。
首先我们来看看爬虫框架 Scrapy 的常用命令。
命令 | 作用 |
---|---|
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 |
在安装完成 Scrapy框架之后,我们开始创建第一个 Scrapy 项目,通过这个示例,我们了解一下 Scrapy 框架的开发流程。
创建 Scrapy 框架的过程与 Django 框架中创建项目文件有些相似。初步流程如下:
然后从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
创建好一个名为 first_scrapy 的项目后,可使用tree命令查看项目目录下的文件,显示如下:
tutorial
├── tutorial
│ ├── __init__.py
│ ├── items.py
│ ├── middlewares.py
│ ├── pipelines.py
│ ├── settings.py
│ └── spiders
│ └── __init__.py
└── scrapy.cfg
这里各个文件的功能描述如下:
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
执行完毕之后,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
这里有三个属性——'name'、'allowed_domains'、' start_urls
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。