Scrapyrt爲Scrapy提供了一個調度的HTTP接口。有了它咱們不須要再執行Scrapy命令,而是經過請求一個HTTP接口便可調度Scrapy任務,咱們就不須要藉助於命令行來啓動項目了。若是項目是在遠程服務器運行,利用它來啓動項目是個不錯的選擇。
html
咱們以本章Scrapy入門項目爲例來講明Scrapyrt的使用方法,項目源代碼地址爲:https://github.com/Python3WebSpider/ScrapyTutorial。
git
請確保Scrapyrt已經正確安裝並正常運行
github
首先將項目下載下來,在項目目錄下運行Scrapyrt,假設當前服務運行在9080端口上。下面將簡單介紹Scrapyrt的使用方法。
json
目前,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服務實現任務的調度並直接取到爬取結果,這很方便。
除了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"}'複製代碼
運行結果和上文相似,一樣是輸出了爬取狀態、結果、統計信息等內容。
以上內容即是Scrapyrt的相關用法介紹。經過它,咱們方便地調度Scrapy項目的運行並獲取爬取結果。更多的使用方法能夠參考官方文檔:http://scrapyrt.readthedocs.io。
本資源首發於崔慶才的我的博客靜覓: Python3網絡爬蟲開發實戰教程 | 靜覓
如想了解更多爬蟲資訊,請關注個人我的微信公衆號:進擊的Coder
weixin.qq.com/r/5zsjOyvEZ… (二維碼自動識別)