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

默认的Scrapy项目结构

在開始对命令行工具以及子命令的探索前,让我们首先了解一下Scrapy的项目的文件夹结构。

尽管能够被改动,但全部的Scrapy项目默认有类似于下边的文件结构:

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

scrapy.cfg 存放的文件夹被觉得是 项目的根文件夹 。该文件里包括python模块名的字段定义了项目的设置。

比如:

[settings]
default = myproject.settings

使用 scrapy 工具

您能够以无參数的方式启动Scrapy工具。

该命令将会给出一些使用帮助以及可用的命令:

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

该命令将会在 myproject 文件夹中创建一个Scrapy项目。

接下来,进入到项目文件夹中:

cd myproject

这时候您就能够使用 scrapy 命令来管理和控制您的项目了。

控制项目

您能够在您的项目中使用 scrapy 工具来对其进行控制和管理。

比方。创建一个新的spider:

scrapy genspider mydomain mydomain.com

有些Scrapy命令(比方 crawl)要求必须在Scrapy项目中执行。
您能够通过下边的 commands reference来了解哪些命令须要在项目中执行,哪些不用。

另外要注意。有些命令在项目里执行时的效果有些许差别。 以fetch命令为例,假设被爬取的url与某个特定spider相关联, 则该命令将会使用spider的动作(spider-overridden behaviours)。 (比方spider指定的 user_agent)。
该表现是有意而为之的。一般来说, fetch 命令就是用来測试检查spider是怎样下载页面。

可用的工具命令(tool commands)

该章节提供了可用的内置命令的列表。每一个命令都提供了描写叙述以及一些使用样例。

您总是能够通过执行命令来获取关于每一个命令的具体内容:

scrapy <command> -h

您也能够查看全部可用的命令:

scrapy -h

Scrapy提供了两种类型的命令。

一种必须在Scrapy项目中执行(针对项目(Project-specific)的命令),第二种则不须要(全局命令)。

全局命令在项目中执行时的表现可能会与在非项目中执行有些许区别(由于可能会使用项目的设定)。

全局命令:

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

项目(Project-only)命令:

  • crawl
  • check
  • list
  • edit
  • parse
  • genspider
  • deploy
  • bench

startproject

  • 语法: scrapy startproject <project_name>
  • 是否须要项目: no

在 project_name 目录下创建一个名为 project_name 的Scrapy项目。

样例:

$ scrapy startproject myproject

genspider

  • 语法: scrapy genspider [-t template] <name> <domain>
  • 是否须要项目: yes

在当前项目中创建spider。

这不过创建spider的一种快捷方法。该方法能够使用预定义好的模板来生成spider。您也能够自己创建spider的源代码文件。

样例:

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

$ scrapy genspider -d basic
import scrapy

class $classname(scrapy.Spider):
    name = "$name"
    allowed_domains = ["$domain"]
    start_urls = (
        ‘http://www.$domain/‘,
        )

    def parse(self, response):
        pass

$ scrapy genspider -t basic example example.com
Created spider ‘example‘ using template ‘basic‘ in module:
  mybot.spiders.example

crawl

  • 语法: scrapy crawl <spider>
  • 是否须要项目: yes

使用spider进行爬取。

样例:

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

check

  • 语法: scrapy check [-l] <spider>
  • 是否须要项目: yes

执行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
  • 是否须要项目: yes

列出当前项目中全部可用的spider。

每行输出一个spider。

使用样例:

$ scrapy list
spider1
spider2

edit

  • 语法: scrapy edit <spider>
  • 是否须要项目: yes

使用 EDITOR 中设定的编辑器编辑给定的spider

该命令不过提供一个快捷方式。

开发人员能够自由选择其它工具或者IDE来编写调试spider。

样例:

$ scrapy edit spider1

fetch

  • 语法: scrapy fetch <url>
  • 是否须要项目: no

使用Scrapy下载器(downloader)下载给定的URL。并将获取到的内容送到标准输出。

该命令以spider下载页面的方式获取页面。比如。假设spider有 USER_AGENT 属性改动了
User Agent,该命令将会使用该属性。

因此,您能够使用该命令来查看spider怎样获取某个特定页面。

该命令假设非项目中执行则会使用默认Scrapy downloader设定。

样例:

$ 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-Length‘: [‘596‘],
 ‘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>
  • 是否须要项目: no

在浏览器中打开给定的URL,并以Scrapy spider获取到的形式展现。 有些时候spider获取到的页面和普通用户看到的并不同样。

因此该命令能够用来检查spider所获取到的页面。并确认这是您所期望的。

样例:

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

shell

  • 语法: scrapy shell [url]
  • 是否须要项目: no

以给定的URL(假设给出)或者空(没有给出URL)启动Scrapy shell。 查看 Scrapy终端(Scrapy
shell)
 获取很多其它信息。

样例:

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

parse

  • 语法: scrapy parse <url> [options]
  • 是否须要项目: yes

获取给定的URL并使用对应的spider分析处理。

假设您提供 --callback 选项,则使用spider的该方法处理,否则使用 parse 。

支持的选项:

  • --spider=SPIDER:
    跳过自己主动检測spider并强制使用特定的spider
  • --a NAME=VALUE:
    设置spider的參数(可能被反复)
  • --callback or -c:
    spider中用于解析返回(response)的回调函数
  • --pipelines:
    在pipeline中处理item
  • --rules or -r:
    使用 CrawlSpider 规则来发现用来解析返回(response)的回调函数
  • --noitems:
    不显示爬取到的item
  • --nolinks:
    不显示提取到的链接
  • --nocolour:
    避免使用pygments对输出着色
  • --depth or -d:
    指定跟进链接请求的层次数(默认: 1)
  • --verbose or -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]
  • 是否须要项目: no

获取Scrapy的设定

在项目中执行时,该命令将会输出项目的设定值,否则输出Scrapy默认设定。

样例:

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

runspider

  • 语法: scrapy runspider <spider_file.py>
  • 是否须要项目: no

在未创建项目的情况下,执行一个编写在Python文件里的spider。

样例:

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

version

  • 语法: scrapy version [-v]
  • 是否须要项目: no

输出Scrapy版本号。配合 -v 执行时,该命令同一时候输出Python,
Twisted以及平台的信息。方便bug提交。

deploy

0.11 新版功能.

  • 语法: scrapy deploy [ <target:project> | -l <target> | -L ]
  • 是否须要项目: yes

将项目部署到Scrapyd服务。

查看 部署您的项目 。

bench

0.17 新版功能.

  • 语法: scrapy bench
  • 是否须要项目: no

执行benchmark測试。 Benchmarking 。

自己定义项目命令

您也能够通过 COMMANDS_MODULE 来加入您自己的项目命令。您能够以 scrapy/commands 中Scrapy
commands为例来了解怎样实现您的命令。

COMMANDS_MODULE

Default: ‘‘ (empty
string)

用于查找加入自己定义Scrapy命令的模块。

样例:

COMMANDS_MODULE = ‘mybot.commands‘
时间: 2024-10-09 20:20:25

Scrapy系列教程(1)------命令行工具的相关文章

scrapy系列教程二——命令行工具(Command line tools)

1.命令行工具(Command line tools) Scrapy是通过Scrapy命令行工具进行控制的.这里我们称之为 “Scrapy tool” 以用来和子命令进行区分. 对于子命令,我们称为 “command” 或者 “Scrapy commands”.Scrapy tool 针对不同的目的提供了多个命令,每个命令支持不同的参数和选项. 2.常用命令 官方命令行说明文档 http://scrapy-chs.readthedocs.org/zh_CN/latest/topics/comma

Apache Kafka系列(二) 命令行工具(CLI)

Apache Kafka系列(一) 起步 Apache Kafka系列(二) 命令行工具(CLI) Apache Kafka命令行工具(Command Line Interface,CLI),下文简称CLI. 1. 启动Kafka 启动Kafka需要两步: 1.1. 启动ZooKeeper [[email protected] kafka_2.12-0.11.0.0]# bin/zookeeper-server-start.sh config/zookeeper.properties 1.2.

Scrapy 1.4 文档 05 命令行工具

在系统命令行中,使用 scrapy 命令可以创建工程或启动爬虫,它控制着 Scrapy 的行为,我们称之为 Scrapy 命令行工具(command-line tool)或 Scrapy 工具(Scrapy tool).紧跟在 scrapy 命令之后的命令属于子命令(我们称之为"命令(commands)"或"Scrapy命令(Scrapy commands)",例如用于新建项目的 startproject 命令). Scrapy 工具包含许多命令,有各自的功能.参数

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

Windows 10家庭中文版,Python 3.6.4,virtualenv 16.0.0,Scrapy 1.5.0, 使用scrapy命令行工具建立了爬虫项目(startproject),并使用scrapy genspider建立了爬虫,用于抓取某中文门户网站首页的 新闻标题及其链接,全程都在虚拟环境(virtualenv)中执行. 使用scrapy crawl执行爬虫程序并导入一个json文件,此时可以看到,命令行窗口显示的 新闻标题是中文,但在打开导出的json文件时,其新闻标题显示为以

Scrapy命令行工具简介

Windows 10家庭中文版,Python 3.6.4,virtualenv 16.0.0,Scrapy 1.5.0, 在最初使用Scrapy时,使用编辑器或IDE手动编写模块来创建爬虫(Spider)程序,然后使用scrapy crawl命令执行Spider. 这种方式很初级.繁琐,不适合更大型的项目. 很好的是,Scrapy提供了 命令行工具(Command line tool),通过这套工具,开发者可以轻松建立 Scrapy项目,而不仅仅是一个一个的Spider程序. 初见Scrapy命

JDK的命令行工具系列 (一) jps、jstat

概述 在我们进行故障定位和性能分析时, 可以使用Java Dump(也叫Dump文件)来帮助排查问题, 它记录了JVM运行期间的内存占用和线程执行等情况.其中Heap Dump文件是二进制格式, 它保存了某一时刻的系统信息.虚拟机属性.完整的线程Dump.所有类和对象的状态等, 是指定时刻的java堆栈的快照; Thread Dump文件是纯文本格式, 它保存了java应用程序各线程在某一时刻的运行位置. 在%JAVA_HOME%\lib目录下, 有一些诸如jps.exe.jstack.exe.

JDK的命令行工具系列 (二) javap、jinfo、jmap

javap: 反编译工具, 可用来查看java编译器生成的字节码 参数摘要: -help 帮助 -l 输出行和变量的表 -public 只输出public方法和域 -protected 只输出public和protected类和成员 -package 只输出包,public和protected类和成员,这是默认的 -p -private 输出所有类和成员 -s 输出内部类型签名 -c 输出分解后的代码,例如,类中每一个方法内,包含java字节码的指令 -verbose 输出栈大小,方法参数的个数

ZooKeeper系列3:ZooKeeper命令、命令行工具及简单操作

问题导读1.ZooKeeper包含哪些常用命令?2.通过什么命令可以列出服务器 watch 的详细信息?3.ZooKeeper包含哪些操作?4.ZooKeeper如何创建zookeeper? 常用命令 ZooKeeper 支持某些特定的四字命令字母与其的交互.它们大多是查询命令,用来获取 ZooKeeper 服务的当前状态及相关信息.用户在客户端可以通过 telnet 或 nc 向 ZooKeeper 提交相应的命令. ZooKeeper 常用四字命令见下表 1 所示: 表 1 : ZooKee

ThinkPHP命令行工具Tptool2.0使用教程

经常需要用ThinkPHP开发项目,总感觉手动创建控制器.模型.视图是一件繁琐的事情,需要不停地复制粘贴.还有当文件夹的层级很深时,来回找文件也是一件很耗时的事情. 我一直坚信:工具善其事,必先利其器.在借鉴国外的一些框架如ExtJS和Yii后,我想到了开发一个命令行工具来简化操作.基于ThinkPHP3.2开发~ 工具下载地址:https://git.oschina.net/jiusem/Tptool 安装 将项目解压到D盘下,形成的目录是D:\tptool,并将该路径添加到环境变量. 使用