在系统命令行中,使用 scrapy 命令可以创建工程或启动爬虫,它控制着 Scrapy 的行为,我们称之为 Scrapy 命令行工具(command-line tool)或 Scrapy 工具(Scrapy tool)。紧跟在 scrapy 命令之后的命令属于子命令(我们称之为“命令(commands)”或“Scrapy命令(Scrapy commands)”,例如用于新建项目的 startproject 命令)。

Scrapy 工具包含许多命令,有各自的功能、参数和选项。

(scrapy deploy 命令已在1.0中删除,取而代之的是 scryd-deploy,请参阅 Deploying your project。)

配置设置

Scrapy 默认在 scrapy.cfg 文件中查找配置参数:

  1. 系统范围:/etc/scrapy.cfg 或 c:\scrapy\scrapy.cfg
  2. 用户范围:~/.config/scrapy.cfg ($XDG_CONFIG_HOME)  和  ~/.scrapy.cfg ($HOME)
  3. 项目内范围:scrapy.cfg

项目范围的设置将覆盖所有其他文件的设置,用户范围内定义的设置的覆盖系统范围内的设置。

Scrapy 也可以接受来自环境变量的配置。目前有:

Scrapy项目的默认结构

在深入了解命令行工具及其子命令之前,先来看一下 Scrapy 项目的目录结构。

虽然可以修改,但默认所有的 Scrapy 项目都具有相同的文件结构,与此类似:

scrapy.cfg
myproject/
    __init__.py
    items.py
    pipelines.py
    settings.py
    spiders/
        __init__.py
        spider1.py
        spider2.py
        ...

scrapy.cfg 文件所在的目录称为项目根目录(project root directory)。 该文件中声明了项目设置所在的 python 模块。例如:

[settings]
default = myproject.settings

(myproject.settings 指 /myproject/settings.py)

使用 scrapy 工具

在没有参数的情况下直接运行 scrapy 命令将得到一些使用帮助和可用的命令,如下所示(X.Y 是版本号):

Scrapy X.Y - no active project

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

Available commands:
  crawl         Run a spider
  fetch         Fetch a URL using the Scrapy downloader
[...]

如果是在某一 Scrapy 项目的根目录中,第一行将打印出当前项目的名称。 在上面的例子中,它是从项目外部运行的。如果从项目里面运行,它会打印出这样的东西:

Scrapy X.Y - project: myproject

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

[...]

创建项目

通常您使用 scrapy 工具的第一件事是创建您的 Scrapy 项目:

scrapy startproject myproject [project_dir]

这将在 project_dir 目录下创建一个 Scrapy 项目。如果没有指定 project_dir,将会在与 myproject 同名的目录中创建项目(如果没有则创建它)。

接下来,进入新建项目的根目录:

cd project_dir

现在,您已经准备好了使用 scrapy 命令来管理和控制您的项目。

管理项目

在项目内(即在项目根目录下)您可以使用 scrapy 工具来控制和管理您的项目。

例如,新建一个爬虫:

scrapy genspider mydomain mydomain.com

一些 Scrapy 命令(如 crawl)必须在 Scrapy 项目内运行。 具体请参阅下一节:scrapy 工具中的命令。

一些命令在从项目内部运行时可能稍有不同。 例如,如果要获取的 URL 与某个特定的爬虫相关联,则 fetch 命令将使用爬虫重载的行为(例如爬虫的
user_agent 属性将覆盖默认的 user-agent)。 这是有意的,因为 fetch 命令旨在检查爬虫是怎样下载页面的。

scrapy 工具中的命令

本节介绍 Scrapy 的内置命令、说明和一些示例。 记住,您可以随时通过运行下面的命令来获取有关每个命令的更多信息:

scrapy <command> -h

您也通过下面的命令查看所有可用的命令:

scrapy -h

有两种命令,仅在 Scrapy 项目内工作的命令(项目命令:Project-specific commands)以及也可以在项目外工作的命令(全局命令:Global commands),尽管它们在项目内运行时可能会略有不同(此时会使用项目重载的设置)。

全局命令:

  • startproject
  • genspider
  • settings
  • runspider
  • shell
  • fetch
  • view
  • version

项目命令:

  • crawl
  • check
  • list
  • edit
  • parse
  • bench

startproject

  • 语法:scrapy startproject <project_name> [project_dir]
  • 必须在项目内使用:否

在 project_dir 目录下新建一个名为 project_name 的 Scrapy 项目。 如果没有指定 project_dir,project_dir 将与 myproject 同名。

示例:

$ scrapy startproject myproject

genspider

  • 语法:scrapy genspider [-t template] <name> <domain>
  • 必须在项目内使用:否

在当前文件夹或当前项目的 spiders 文件夹中新建一个爬虫。如果在项目中使用此命令。 <name> 参数为爬虫的名称,<domain> 用于生成 allowed_domains 和 start_urls spider 的属性。

示例(template:模板):

$ scrapy genspider -l
Available templates:
  basic
  crawl
  csvfeed
  xmlfeed

$ scrapy genspider example example.com
Created spider 'example' using template 'basic'

$ scrapy genspider -t crawl scrapyorg scrapy.org
Created spider 'scrapyorg' using template 'crawl'

这只是一个基于预定义模板创建爬虫的快捷命令,但不是创建爬虫的唯一方法。 您可以直接使用源代码编写爬虫,而不是使用此命令。

crawl

  • 语法:scrapy crawl <spider>
  • 必须在项目内使用:是

启动爬虫。

示例:

$ scrapy crawl myspider
[ ... myspider starts crawling ... ]

check

  • 语法:scrapy check [-l] <spider>
  • 必须在项目内使用:是

协议(contract)检查。

示例:

$ scrapy check -l
first_spider
  * parse
  * parse_item
second_spider
  * parse
  * parse_item

$ scrapy check
[FAILED] first_spider:parse_item
>>> 'RetailPricex' field is missing

[FAILED] first_spider:parse
>>> Returned 92 requests, expected 0..4

list

  • 语法:scrapy list
  • 必须在项目内使用:是

列出项目中所有可用爬虫。

示例:

$ scrapy list
spider1
spider2

edit

  • 语法:scrapy edit <spider>
  • 必须在项目内使用:是

使用EDITOR环境变量或设置中定义的编辑器编辑爬虫。

该命令仅作为一种快捷方式提供,开发人员可以自由选择工具或IDE来编写和调试爬虫。

示例:

$ scrapy edit spider1

fetch

  • 语法:scrapy fetch <url>
  • 必须在项目内使用:否

使用 Scrapy 下载器下载给定的 URL,并将内容输出到标准输出流。

这个命令的有趣之处在于它会使用爬虫定义的方式下载页面。 例如,如果爬虫具有 USER_AGENT 属性覆盖了 User Agent,那么命令将使用爬虫里的属性。

所以这个命令可以用来查看爬虫如何获取某个页面。

在项目之外使用时只会使用默认的 Scrapy 下载器设置。

支持的选项:

  • --spider = SPIDER:强制使用给定的爬虫
  • --headers:打印 HTTP 响应头
  • --no-redirect:禁用 HTTP 3xx 重定向(默认启用)

示例:

$ scrapy fetch --nolog http://www.example.com/some/page.html
[ ... html content here ... ]

$ scrapy fetch --nolog --headers http://www.example.com/
{'Accept-Ranges': ['bytes'],
 'Age': ['1263   '],
 'Connection': ['close     '],
 '],
 'Content-Type': ['text/html; charset=UTF-8'],
 'Date': ['Wed, 18 Aug 2010 23:59:46 GMT'],
 'Etag': ['"573c1-254-48c9c87349680"'],
 'Last-Modified': ['Fri, 30 Jul 2010 15:30:18 GMT'],
 'Server': ['Apache/2.2.3 (CentOS)']}

view

  • 语法:scrapy view <url>
  • 必须在项目内使用:否

以 Scrapy 爬虫所“看到”的样子在浏览器中打开给定的URL。用来查看爬虫所“看到”的样子是否是你所期望的,因为两者有可能不同。

支持的选项:

  • --spider = SPIDER:强制使用给定的爬虫
  • --no-redirect:禁用 HTTP 3xx 重定向(默认启用)

示例:

$ scrapy view http://www.example.com/some/page.html
[ ... browser starts ... ]

shell

  • 语法:scrapy shell [url]
  • 必须在项目内使用:否

以给定的 URL(如果给定)启动 Scrapy shell。支持 UNIX 风格的本地文件路径,包括相对路径(./ 或 ../)和绝对路径。请参阅 Scrapy shell 了解更多信息。

支持的选项:

  • --spider = SPIDER:强制使用给定的爬虫
  • -c code:在 shell 中执行代码,打印结果并退出
  • --no-redirect:禁用 HTTP 3xx 重定向(默认启用); 这只会影响您在命令行参数中给定的 URL;,一旦你进入到 shell 中,fetch(url) 将默认启用 HTTP 重定向。

示例:

$ scrapy shell http://www.example.com/some/page.html
[ ... scrapy shell starts ... ]

$ scrapy shell --nolog http://www.example.com/ -c '(response.status, response.url)'
(200, 'http://www.example.com/')

# 默认启用重定向
$ scrapy shell --nolog http://httpbin.org/redirect-to?url=http%3A%2F%2Fexample.com%2F -c '(response.status, response.url)'
(200, 'http://example.com/')

# 你可以通过 --no-redirect 禁用重定向
# (只作用于命令行参数中的 URL)
$ scrapy shell --no-redirect --nolog http://httpbin.org/redirect-to?url=http%3A%2F%2Fexample.com%2F -c '(response.status, response.url)'
(302, 'http://httpbin.org/redirect-to?url=http%3A%2F%2Fexample.com%2F')

parse

  • 语法:scrapy parse <url> [options]
  • 必须在项目内使用:是

获取给定的 URL 并使用爬虫处理它的方式解析它,使用 --callback 选项传递解析方法,默认使用 parse 方法。

支持的选项:

  • --spider = SPIDER:强制使用给定的爬虫
  • --a NAME = VALUE:设置爬虫参数(可能会重复)
  • --callback 或 -c:解析响应对象的回调方法
  • --piplines:通过管道处理项
  • --rules 或 -r:使用 CrawlSpider 规则查找用于解析响应对象的回调方法
  • --noitems:不显示抓取到的项
  • --nolinks:不显示提取的链接
  • --nocolour:避免使用pygments对输出着色
  • --depth 或 -d:递归爬取的深度(默认值:1)
  • --verbose 或 -v:显示爬取每一层的信息

示例:

$ scrapy parse http://www.example.com/ -c parse_item
[ ... scrapy log lines crawling example.com spider ... ]

>>> STATUS DEPTH LEVEL 1 <<<
# Scraped Items  ------------------------------------------------------------
[{'name': u'Example item',
 'category': u'Furniture',
 'length': u'12 cm'}]

# Requests  -----------------------------------------------------------------
[]

settings

  • 语法:scrapy settings [options]
  • 必须在项目内使用:否

获取 Scrapy 设置。

如果在项目中使用它将显示项目的设置值,否则将显示 Scrapy 默认的设置。

示例:

$ scrapy settings --get BOT_NAME
scrapybot
$ scrapy settings --get DOWNLOAD_DELAY
0

runspider

  • 语法:scrapy runspider <spider_file.py>
  • 必须在项目内使用:否

运行一个独立的爬虫 Python 文件,无需创建一个项目。

示例:

$ scrapy runspider myspider.py
[ ... spider starts crawling ... ]

version

  • 语法:scrapy version [-v]
  • 必须在项目内使用:否

打印 Scrapy 版本。使用 -v 时还会打印出 Python,Twisted 和 Platform 的信息,这对错误报告很有用。

bench

  • 语法:scrapy bench
  • 必须在项目内使用:否

运行 benchmark 测试。

自定义命令

您还可以使用 COMMANDS_MODULE 设置添加自定义项目命令。有关如何实现命令的示例,请参阅 scrapy commands

COMMANDS_MODULE

默认值:''(空字符串)

用于查找自定义 Scrapy 命令的模块。用于为您的 Scrapy 项目添加自定义命令。

例:

COMMANDS_MODULE = 'mybot.commands'

通过 setup.py 的 entry points 注册命令

注意

这是一个实验性功能,请谨慎使用。

您还可以在 setup.py 文件的 entry point 中添加 scrapy.commands,从外部库添加 Scrapy 命令。

以下示例添加了 my_command 命令:

from setuptools import setup, find_packages

setup(name='scrapy-mymodule',
  entry_points={
    'scrapy.commands': [
      'my_command=my_scrapy_module.commands:MyCommand',
    ],
  },
 )

Scrapy 1.4 文档 05 命令行工具的更多相关文章

  1. Scrapy系列教程(1)------命令行工具

    默认的Scrapy项目结构 在開始对命令行工具以及子命令的探索前,让我们首先了解一下Scrapy的项目的文件夹结构. 尽管能够被改动,但全部的Scrapy项目默认有类似于下边的文件结构: scrapy ...

  2. Python -- Scrapy 命令行工具(command line tools)

    结合scrapy 官方文档,进行学习,并整理了部分自己学习实践的内容 Scrapy是通过 scrapy 命令行工具进行控制的. 这里我们称之为 “Scrapy tool” 以用来和子命令进行区分. 对 ...

  3. 『.NET Core CLI工具文档』(一).NET Core 命令行工具(CLI)

    说明:本文是个人翻译文章,由于个人水平有限,有不对的地方请大家帮忙更正. 原文:.NET Core Command Line Tools 翻译:.NET Core命令行工具 什么是 .NET Core ...

  4. Scrapy命令行工具简介

    Windows 10家庭中文版,Python 3.6.4,virtualenv 16.0.0,Scrapy 1.5.0, 在最初使用Scrapy时,使用编辑器或IDE手动编写模块来创建爬虫(Spide ...

  5. 使用Scrapy命令行工具【导出JSON文件】时编码设置

    Windows 10家庭中文版,Python 3.6.4,virtualenv 16.0.0,Scrapy 1.5.0, 使用scrapy命令行工具建立了爬虫项目(startproject),并使用s ...

  6. Scrapy框架——介绍、安装、命令行创建,启动、项目目录结构介绍、Spiders文件夹详解(包括去重规则)、Selectors解析页面、Items、pipelines(自定义pipeline)、下载中间件(Downloader Middleware)、爬虫中间件、信号

    一 介绍 Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,使用它可以以快速.简单.可扩展的方式从网站中提取所需的数据.但目前Scrapy的用途十分广泛,可 ...

  7. Scrapy 1.4 文档 03 Scrapy 教程

    在本教程中,我们假设您已经安装了Scrapy.如果没有,请参阅安装指南. 我们将要抓取 quotes.toscrape.com,一个列出著名作家的名言(quote)的网站. 本教程将引导您完成以下任务 ...

  8. VC++ chap13 文档与串行化

    Lesson 13 文档与串行化 13.1使用CArchive类对文件进行读写操作 //让对象数据持久性的过程称之为串行化,或者序列化 void CGraphicView::OnFileWrite() ...

  9. LINUX文档管理命令

    body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...

随机推荐

  1. saiku查询出错如何debug(saiku查询过程的本质),以及相关workbench的schema设置

    saiku连接infiniDB数据库 1,日期维度无结果. 原因:(数据库表内容出错) 表最后一列(日期字段)匹配出错,用"like %日期%"可以.说明入库时写入多余的空白符,因 ...

  2. iOS监听模式系列之推送消息通知

    推送通知 和本地通知不同,推送通知是由应用服务提供商发起的,通过苹果的APNs(Apple Push Notification Server)发送到应用客户端.下面是苹果官方关于推送通知的过程示意图: ...

  3. MTK平台 Android4.0.3 定制关机动画

    实现效果是这样的,长按电源键弹出关机对话框,选择关机项将呈现关机动画和音乐直到正常关机完毕,下面说说具体思路及实现代码 找到长按电源键控制代码 /frameworks/base/policy/src/ ...

  4. mybatis中#{}与${}的区别

    今天学习了下mybatis的查询,了解到了#{}与${}的区别, 配置文件如下: <?xml version="1.0" encoding="UTF-8" ...

  5. Spring中对象和属性的注入方式

    一:Spring的bean管理 1.xml方式 bean实例化三种xml方式实现 第一种 使用类的无参数构造创建,首先类中得有无参构造器(重点) 第二种 使用静态工厂创建 (1)创建静态的方法,返回类 ...

  6. HashMap与ConcurrentHashMap的测试报告

    日期:2008-9-10 测试平台: CPU:Intel Pentium(R) 4 CPU 3.06G 内存:4G 操作系统:window server 2003 一.HashMap与Concurre ...

  7. win10 下安装mysql服务器社区版本mysql-5.7.22-winx64

    下载 下载: http://dev.mysql.com/downloads/mysql/ 解压到C盘 添加环境变量path 添加环境变量 右击我的电脑->属性->高级系统设置->高级 ...

  8. .net core2.0通过entityframework访问Sqlserver数据库

    .net core经历2.0版本之后,已经非常稳定,完全可以进行企业级开发并跨平台部署到几乎任何服务器.个人测试效率是.net core是.net framework效率的3倍.其他语言没有测试,等测 ...

  9. 走进netty

    三月份开始看公司RPC框架的源码,发现如果要折腾明白,网络通讯这块知识必不可少.于是从如下几点开始逐步研究. 一.基础知识篇 1.Unix下5种I/O模型 Linux的内核将所有外部设备都看作一个文件 ...

  10. Fiddler抓包使用教程-断点调试

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/62896784 本文出自[赵彦军的博客] Fiddler 里面的断点调试有2种方式. ...