Scrapy框架的使用之Scrapyrt的使用

Scrapyrt爲Scrapy提供了一個調度的HTTP接口。有了它咱們不須要再執行Scrapy命令,而是經過請求一個HTTP接口便可調度Scrapy任務,咱們就不須要藉助於命令行來啓動項目了。若是項目是在遠程服務器運行,利用它來啓動項目是個不錯的選擇。
html

1、本節目標

咱們以本章Scrapy入門項目爲例來講明Scrapyrt的使用方法,項目源代碼地址爲:https://github.com/Python3WebSpider/ScrapyTutorial。
git

2、準備工做

請確保Scrapyrt已經正確安裝並正常運行
github

3、啓動服務

首先將項目下載下來,在項目目錄下運行Scrapyrt,假設當前服務運行在9080端口上。下面將簡單介紹Scrapyrt的使用方法。
json

4、GET請求

目前,GET請求方式支持以下的參數。
bash

  • spider_name:Spider名稱,字符串類型,必傳參數。若是傳遞的Spider名稱不存在,則返回404錯誤。服務器

  • url:爬取連接,字符串類型,若是起始連接沒有定義就必需要傳遞這個參數。若是傳遞了該參數,Scrapy會直接用該URL生成Request,而直接忽略start_requests()方法和start_urls屬性的定義。微信

  • callback:回調函數名稱,字符串類型,可選參數。若是傳遞了就會使用此回調函數處理,不然會默認使用Spider內定義的回調函數。cookie

  • max_requests:最大請求數量,數值類型,可選參數。它定義了Scrapy執行請求的Request的最大限制,如定義爲5,則表示最多隻執行5次Request請求,其他的則會被忽略。網絡

  • start_requests:表明是否要執行start_requests方法,布爾類型,可選參數。Scrapy項目中若是定義了start_requests()方法,那麼項目啓動時會默認調用該方法。可是在Scrapyrt中就不同了,Scrapyrt默認不執行start_requests()方法,若是要執行,須要將start_requests參數設置爲true。併發

咱們執行以下命令:

curl http://localhost:9080/crawl.json?spider_name=quotes&url=http://quotes.toscrape.com/複製代碼

結果以下圖所示。

返回的是一個JSON格式的字符串,咱們解析它的結構,以下所示:

{
  "status": "ok",
  "items": [
    {
      "text": "「The world as we have created it is a process of o...",
      "author": "Albert Einstein",
      "tags": [
        "change",
        "deep-thoughts",
        "thinking",
        "world"
      ]
    },
    ...
    {
      "text": "「... a mind needs books as a sword needs a whetsto...",
      "author": "George R.R. Martin",
      "tags": [
        "books",
        "mind"
      ]
    }
  ],
  "items_dropped": [],
  "stats": {
    "downloader/request_bytes": 2892,
    "downloader/request_count": 11,
    "downloader/request_method_count/GET": 11,
    "downloader/response_bytes": 24812,
    "downloader/response_count": 11,
    "downloader/response_status_count/200": 10,
    "downloader/response_status_count/404": 1,
    "dupefilter/filtered": 1,
    "finish_reason": "finished",
    "finish_time": "2017-07-12 15:09:02",
    "item_scraped_count": 100,
    "log_count/DEBUG": 112,
    "log_count/INFO": 8,
    "memusage/max": 52510720,
    "memusage/startup": 52510720,
    "request_depth_max": 10,
    "response_received_count": 11,
    "scheduler/dequeued": 10,
    "scheduler/dequeued/memory": 10,
    "scheduler/enqueued": 10,
    "scheduler/enqueued/memory": 10,
    "start_time": "2017-07-12 15:08:56"
  },
  "spider_name": "quotes"
}複製代碼

這裏省略了items絕大部分。status顯示了爬取的狀態,items部分是Scrapy項目的爬取結果,items_dropped是被忽略的Item列表,stats是爬取結果的統計狀況。此結果和直接運行Scrapy項目獲得的統計是相同的。

這樣一來,咱們就經過HTTP接口調度Scrapy項目並獲取爬取結果,若是Scrapy項目部署在服務器上,咱們能夠經過開啓一個Scrapyrt服務實現任務的調度並直接取到爬取結果,這很方便。

5、POST請求

除了GET請求,咱們還能夠經過POST請求來請求Scrapyrt。可是此處Request Body必須是一個合法的JSON配置,在JSON裏面能夠配置相應的參數,支持的配置參數更多。

目前,JSON配置支持以下參數。

  • spider_name:Spider名稱,字符串類型,必傳參數。若是傳遞的Spider名稱不存在,則返回404錯誤。

  • max_requests:最大請求數量,數值類型,可選參數。它定義了Scrapy執行請求的Request的最大限制,如定義爲5,則表示最多隻執行5次Request請求,其他的則會被忽略。

  • request:Request配置,JSON對象,必傳參數。經過該參數能夠定義Request的各個參數,必須指定url字段來指定爬取連接,其餘字段可選。

咱們看一個JSON配置實例,以下所示:

{
    "request": {
        "url": "http://quotes.toscrape.com/",
        "callback": "parse",
        "dont_filter": "True",
        "cookies": {
            "foo": "bar"
        }
    },
    "max_requests": 2,
    "spider_name": "quotes"
}複製代碼

咱們執行以下命令,傳遞該JSON配置併發起POST請求:

curl http://localhost:9080/crawl.json -d '{"request": {"url": "http://quotes.toscrape.com/", "dont_filter": "True", "callback": "parse", "cookies": {"foo": "bar"}}, "max_requests": 2, "spider_name": "quotes"}'複製代碼

運行結果和上文相似,一樣是輸出了爬取狀態、結果、統計信息等內容。

6、結語

以上內容即是Scrapyrt的相關用法介紹。經過它,咱們方便地調度Scrapy項目的運行並獲取爬取結果。更多的使用方法能夠參考官方文檔:http://scrapyrt.readthedocs.io。


本資源首發於崔慶才的我的博客靜覓: Python3網絡爬蟲開發實戰教程 | 靜覓

如想了解更多爬蟲資訊,請關注個人我的微信公衆號:進擊的Coder

weixin.qq.com/r/5zsjOyvEZ… (二維碼自動識別)

相關文章
相關標籤/搜索