Scrapy 1.5.0之命令行

配置參數

  1. 系統層面: E:\Python 3.6.2\Lib\site-packages\scrapy\templates\project,
  2. 用戶層面:~/.config/scrapy.cfg ($XDG_CONFIG_HOME) 及 ~/.scrapy.cfg ($HOME) 做全局設置
  3. 項目定義: 在scrapy項目根路徑下的 scrapy.cfg .

優先權:項目定義>用戶層面>系統層面css

Scrapy也會讀取並經過環境變量來設置. 目前支持的有:html

  • SCRAPY_SETTINGS_MODULE
  • SCRAPY_PROJECT
  • SCRAPY_PYTHON_SHELL

scrapy.cfg 文件是在項目的根目錄,其中包括項目名稱與項目設置。python

[settings]
default = [name of the project].settings

[deploy]
#url = http://localhost:6800/
project = [name of the project]

Scrapy命令行

在爬蟲項目外運行scrapy:shell

C:\Users\Administrator>scrapy
Scrapy 1.5.0 - no active project

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

Available commands:
  bench         Run quick benchmark test
  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:windows

F:\PycharmProjects\tutorial>scrapy
Scrapy 1.5.0 - project: tutorial

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

Available commands:
  bench         Run quick benchmark test
  check         Check spider contracts
  crawl         Run a spider
  edit          Edit spider
  fetch         Fetch a URL using the Scrapy downloader
  genspider     Generate new spider using pre-defined templates
  list          List available spiders
  parse         Parse URL (using its spider) and print the results
  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

Use "scrapy <command> -h" to see more info about a command

建立項目

scrapy startproject myproject

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

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

cd myproject

控制項目

建立一個新的spider:app

scrapy genspider mydomain mydomain.com

有些Scrapy命令(好比 crawl)要求必須在Scrapy項目中運行。dom

有些命令在項目裏運行時的效果有些許區別,以fetch命令爲例,若是被爬取的url與某個特定spider相關聯, 則該命令將會使用spider的動做(spider-overridden behaviours) (好比spider指定的 user_agent)。通常來講, fetch 命令就是用來測試檢查spider是如何下載頁面。scrapy

工具命令行

經過運行命令來獲取關於每一個命令的詳細內容:

scrapy <command> -h

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

scrapy -h

Scrapy提供了兩種類型的命令。

全局命令:

  • fetch: 它使用Scrapy downloader 提取的 URL。
  • runspider: 它用於而無需建立一個項目運行自行包含蜘蛛(spider)。

  • settings: 它規定了項目的設定值。

  • shell: 這是一個給定URL的一個交互式模塊。

  • startproject: 它建立了一個新的 Scrapy 項目。

  • version: 它顯示Scrapy版本。

  • view: 它使用Scrapy downloader 提取 URL並顯示在瀏覽器中的內容。

項目命令:

  • crawl: 它是用來使用蜘蛛抓取數據;
  • check: 它檢查項目並由 crawl 命令返回;

  • list: 它顯示本項目中可用蜘蛛(spider)的列表;

  • edit: 能夠經過編輯器編輯蜘蛛;

  • parse:它經過蜘蛛分析給定的URL;

  • bench: 它是用來快速運行基準測試(基準講述每分鐘可被Scrapy抓取的頁面數量)。

自定義命令:

  • 能夠在Scrapy項目中經過COMMANDS_MODULE設置構建一個自定義項目命令。COMMANDS_MODULE = 'mycmd.commands'

startproject

  • 語法: scrapy startproject
  • 是否須要項目: 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  # 查看爬蟲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  # 以basic爲模板建立example,加上--force參數表示覆蓋
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檢查,檢查爬蟲是否合規。

例子:

當某個爬蟲文件出現錯誤時,會報錯,包括語法錯誤。爬蟲時經過name惟一標識。

def parse(self, response):  # 語法不完整
F:\PycharmProjects\tutorial>scrapy check example
Traceback (most recent call last):
  File "e:\python 3.6.2\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "e:\python 3.6.2\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
··········································································

list

  • 語法: scrapy list
  • 是否須要項目: yes

列出當前項目中全部可用的spider。每行輸出一個spider。

例子:

$ scrapy list
spider1
spider2

edit

  • 語法: scrapy edit <spider>
  • 是否須要項目: yes

使用 EDITOR 中設定的編輯器編輯給定的spider

該命令僅僅是提供一個快捷方式。開發者能夠自由選擇其餘工具或者IDE來編寫調試spider。

例子:

$ scrapy edit spider1  # windows下彷佛無效

fetch

  • 語法: scrapy fetch <url>
  • 是否須要項目: no

使用Scrapy下載器(downloader)下載給定的URL,並將獲取到的內容送到標準輸出。

該命令以spider下載頁面的方式獲取頁面。例如,若是spider有 USER_AGENT 屬性修改了 User Agent,該命令將會使用該屬性。

所以,您可使用該命令來查看spider如何獲取某個特定頁面。

該命令若是非項目中運行則會使用默認Scrapy downloader設定。

支持的選項:

  • --spider = SPIDER:繞過 spider 自動檢測,強制使用特定的spider
  • --headers:打印響應的 HTTP 頭,而不是響應的正文
  • - -no-redirect:不遵循 HTTP 3xx 重定向(默認是遵循它們)
F:\PycharmProjects\tutorial>scrapy fetch --nolog http://www.example.com/some/page.html
<!doctype html>
<html>
·················································
</head>

<body>
·················································
</body>
</html>


F:\PycharmProjects\tutorial>scrapy fetch --nolog --headers http://www.example.com/
> Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
> Accept-Language: en
> User-Agent: Scrapy/1.5.0 (+https://scrapy.org)
> Accept-Encoding: gzip,deflate
>
< Cache-Control: max-age=604800
< Content-Type: text/html
< Date: Mon, 11 Jun 2018 06:05:55 GMT
< Etag: "1541025663+gzip"
< Expires: Mon, 18 Jun 2018 06:05:55 GMT
< Last-Modified: Fri, 09 Aug 2013 23:54:35 GMT
< Server: ECS (dca/249E)
< Vary: Accept-Encoding
< X-Cache: HIT

view

  • 語法: scrapy view <url>
  • 是否須要項目: no

在瀏覽器中打開給定的URL,並以Scrapy spider獲取到的形式展示。 有些時候spider獲取到的頁面和普通用戶看到的並不相同。 所以該命令能夠用來檢查spider所獲取到的頁面,並確認這是您所指望的。

例子:

$ scrapy view http://www.example.com/some/page.html
[ ... 開啓瀏覽器 ... ]

shell

  • 語法: scrapy shell [url]
  • 是否須要項目: no

以給定的URL(若是給出)或者空(沒有給出URL)啓動Scrapy shell。 查看 Scrapy終端(Scrapy shell) 獲取更多信息。

支持的選項:

  • --spider = SPIDER:繞過 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 ... ]

parse

  • 語法: scrapy parse <url> [options]
  • 是否須要項目: yes

獲取給定的URL並使用相應的spider分析處理。若是您提供 --callback or -c 選項,則使用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: 顯示每一個請求的詳細信息

例子:

F:\PycharmProjects\tutorial>scrapy parse http://www.example.com/ -c parse_item
2018-06-11 14:29:41 [scrapy.utils.log] INFO: Scrapy 1.5.0 started (bot: tutorial)
2018-06-11 14:29:41 [scrapy.utils.log] INFO: Versions: lxml 4.1.1.0, libxml2 2.9.5, cssselect 1.0.1, parsel 1.2.0, w3lib 1.18.0, Twisted 17.9.0, Python 3.6.2 (v3.6.2:5fd33b5, Jul  8 2017, 04:14:34) [MSC v.1900 32 bit (Intel)], pyOpenSSL 17.3.0 (OpenSSL 1.1.0g  2 Nov 2017), cryptography 2.1.3, Platform Windows-10-10.0.15063-SP0
······················································································

>>> STATUS DEPTH LEVEL 0 <<<
# Scraped Items  ------------------------------------------------------------
[]
# Requests  -----------------------------------------------------------------
[]

settings

  • 語法: scrapy settings [options]
  • 是否須要項目: no

獲取Scrapy的設定

在項目中運行時,該命令將會輸出項目的設定值,不然輸出Scrapy默認設定。

例子:

F:\PycharmProjects\tutorial>scrapy settings --get BOT_NAME
tutorial

F:\PycharmProjects\tutorial>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提交。

bench

0.17 新版功能.

  • 語法: scrapy bench
  • 是否須要項目: no

運行benchmark測試。 Benchmarking 。

自定義項目命令

您也能夠經過 COMMANDS_MODULE 來添加您本身的項目命令。您能夠以 scrapy/commands 中Scrapy commands爲例來了解如何實現您的命令。

COMMANDS_MODULE

Default: '' (empty string)

用於查找添加自定義Scrapy命令的模塊。

例子:

COMMANDS_MODULE = 'mybot.commands'
相關文章
相關標籤/搜索