scrapy1.0手冊--01--命令行工具(Command line tools)

命令行工具(Command line tools)

0.10 新版功能.html

Scrapy是經過 scrapy 命令行工具進行控制的。 這裏咱們稱之爲 「Scrapy tool」 以用來和子命令進行區分。 對於子命令,咱們稱爲 「command」 或者 「Scrapy commands」。python

Scrapy tool 針對不一樣的目的提供了多個命令,每一個命令支持不一樣的參數和選項。git

默認的Scrapy項目結構

在開始對命令行工具以及子命令的探索前,讓咱們首先了解一下Scrapy的項目的目錄結構。github

雖然能夠被修改,但全部的Scrapy項目默認有相似於下邊的文件結構:shell

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工具。該命令將會給出一些使用幫助以及可用的命令:dom

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

Scrapy X.Y - project: myproject Usage: scrapy <command> [options] [args] [...] 

建立項目

通常來講,使用 scrapy 工具的第一件事就是建立您的Scrapy項目:編輯器

scrapy startproject myproject 

該命令將會在 myproject 目錄中建立一個Scrapy項目。ide

接下來,進入到項目目錄中:

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)的命令),另一種則不須要(全局命令)。全局命令在項目中運行時的表現可能會與在非項目中運行有些許差異(由於可能會使用項目的設定)。

全局命令:

項目(Project-only)命令:

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'
相關文章
相關標籤/搜索