Scrapy爬虫入门教程三 命令行工具介绍和示例

Python版本管理:pyenv和pyenv-virtualenv
Scrapy爬虫入门教程一 安装和基本使用
Scrapy爬虫入门教程二 官方提供Demo
Scrapy爬虫入门教程三 命令行工具介绍和示例
Scrapy爬虫入门教程四 Spider(爬虫)
Scrapy爬虫入门教程五 Selectors(选择器)
Scrapy爬虫入门教程六 Items(项目)
Scrapy爬虫入门教程七 Item Loaders(项目加载器)
Scrapy爬虫入门教程八 交互式 shell 方便调试
Scrapy爬虫入门教程九 Item Pipeline(项目管道)
Scrapy爬虫入门教程十 Feed exports(导出文件)
Scrapy爬虫入门教程十一 Request和Response(请求和响应)
Scrapy爬虫入门教程十二 Link Extractors(链接提取器)

开发环境:
Python 3.6.0 版本 (当前最新)
Scrapy 1.3.2 版本 (当前最新)

[toc]

命令行工具

Scrapy是通过scrapy命令行工具来控制的,当前最新版本0.10

配置设置

Scrapy将scrapy.cfg在标准位置的ini样式文件中查找配置参数:

  1. 系统默认配置:/etc/scrapy.cfgc:\scrapy\scrapy.cfg

  2. 全局配置文件:~/.config/scrapy.cfg$XDG_CONFIG_HOME)和~/.scrapy.cfg$HOME)用于

  3. 项目配置文件:scrapy.cfg 在scrapy项目的根目录中。

来自这些文件的设置将按照所列的优先顺序进行合并:用户定义的值比系统级默认值具有更高的优先级,项目范围的设置将在定义时覆盖所有其他设置

Scrapy也理解,并且可以通过配置一些环境变量。目前这些是:

SCRAPY_SETTINGS_MODULE(请参阅指定设置
SCRAPY_PROJECT
SCRAPY_PYTHON_SHELL(见Scrapy shell



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

会得到如下提示:
Scrapy 1.3.2 - 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工具做的第一件事是创建你的Scrapy项目:
scrapy startproject myproject [ project_dir ]

这将在该project_dir目录下创建一个Scrapy项目。如果project_dir没有指定,project_dir将会和myproject名称一样。

接下来,进入新的项目目录:
cd project_dir

您可以使用scrapy命令从那里管理和控制您的项目。



控制项目

您可以使用scrapy项目内部的工具来控制和管理它们。

大家不要着急一下子把所以东西都介绍到,具体细节后面都会写到。

例如,要创建一个新的爬虫:
scrapy genspider mydomain mydomain.com

通过上述命令创建了一个spider name为mydomain的爬虫,start_urls为http://www.cnblogs.com/的爬虫。

一些Scrapy命令(如crawl)必须从Scrapy项目内部运行。请参阅命令参考下文中的哪些命令必须从内部项目运行的详细信息

还要记住,一些命令在从项目中运行时可能有稍微不同的行为。例如,user_agent如果正在获取的URL与某个特定的爬虫相关联,fetch命令将使用爬虫覆盖的行为(例如属性覆盖用户代理)。这是有意的,因为该fetch命令用于检查爬虫程序如何下载页面。



常用的工具命令

此部分包含可用内置命令的列表,其中包含描述和一些用法示例。记住,您可以随时通过运行以下命令获得有关每个命令的更多信息:

scrapy <command> -h

你可以看到所有可用的命令:
scrapy -h

上面两种命令,它们只能在Scrapy项目内部工作,也可以全局命令的情况下工作(但它们可能会被项目内的配置覆盖)。

  • 全局命令:

  • [startproject]

  • [genspider]

  • [settings]

  • [runspider]

  • [shell]

  • [fetch]

  • [view]

  • [version]

  • 仅项目命令:

  • [crawl]

  • [check]

  • [list]

  • [edit]

  • [parse]

  • [bench]

startproject

语法:
scrapy startproject <project_name> [project_dir]

在目录project_name下创建一个名为的Scrapy项目project_dir 。如果project_dir没有指定,project_dir将会和myproject名称一样。

用法示例:
$ scrapy startproject myproject

genspider

语法:
scrapy genspider [-t template] <name> <domain>

在当前文件夹或当前项目的spiders文件夹中创建一个新的爬虫,如果从项目中调用。该<name>参数设置为爬虫的name,而<domain>用于生成allowed_domains和start_urls爬虫的属性。

用法示例:

$ 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>

用法示例:

$ 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列表
spider1
spider2

edit

语法:
scrapy edit <spider>

此命令仅作为最常见情况的方便快捷方式提供,开发人员当然可以选择任何工具或IDE来编写和调试他的爬虫。

用法示例:

$ scrapy edit spider1

fetch

语法:
scrapy fetch <url>

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

这个命令的有趣的事情是它获取爬虫下载它的页面。例如,如果爬虫有一个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-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>

在浏览器中打开给定的URL,因为您的Scrapy爬虫会“看到”它。有时,爬虫会看到与普通用户不同的网页,因此可以用来检查爬虫“看到了什么”并确认它是您期望的。

支持的选项:

--spider=SPIDER:绕过爬虫自动检测和强制使用特定的爬虫
--no-redirect:不遵循HTTP 3xx重定向(默认是遵循它们)
用法示例:

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

shell

语法:
scrapy shell [url]
启动给定URL(如果给定)的Scrapy shell,如果没有给出URL,则为空。还支持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/')

# shell follows HTTP redirects by default
$ scrapy shell --nolog http://httpbin.org/redirect-to?url=http%3A%2F%2Fexample.com%2F -c '(response.status, response.url)'
(200, 'http://example.com/')

# you can disable this with --no-redirect
# (only for the URL passed as command line argument)
$ 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:set spider argument(可以重复)
--callback或者-c:spider方法用作回调来解析响应
--pipelines:通过管道处理项目
--rules或者-r:使用CrawlSpider 规则来发现用于解析响应的回调(即,spider方法)
--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
[...爬虫开始爬行...]

version

语法:
scrapy version [-v]

打印Scrapy版本。如果使用-v它也打印Python,Twisted和平台信息,这是有用的错误报告。

bench

新版本0.17。
语法:
scrapy bench

运行快速基准测试。基准

自定义项目命令

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容