在一個Scrapy爬蟲項目寫好之后,啟動和查看日志還不算麻煩,但是如果你的爬蟲多,且啟動方式及時間,比較有要求,那腳本管理,會非常的麻煩,有沒有什么簡單且方便的管理和部署工具呢?
答案當(dāng)然是有的,且這類工具還是比較多的,在此,本篇文章,就是針對于Scrapy項目的部署方式和工具,進(jìn)行介紹
1. scrapy項目的cfg文件
在介紹正式部署前,首先了解下Scrapy的部署內(nèi)容
首先,一個完整的Scrapy項目,里面必須含有cfg后綴文件,和所需的py文件,以及spider目錄下的爬蟲文件,還有可能包含一些自定義的python包和工具函數(shù)。
下圖是一個最基礎(chǔ)的爬蟲項目的目錄結(jié)構(gòu)圖【工具是Pycharm】:

其中,除了cfg文件之外,其他的py文件,都是給爬蟲運(yùn)行用的,都和部署沒什么關(guān)系。那順便來看下cfg文件的內(nèi)容:

在這里面,有兩個,第一個是settings,是指定項目中的配置文件;第二個是deploy,是部署用的,不過默認(rèn)的url,被注釋了,因為這是命令行部署用的,不太推薦
2. Scrapy配套的部署工具庫
本篇文章的目的是部署和管理,但是部署的操作還是要學(xué)的,因為這是基礎(chǔ)。
為了方便的管理scrapy項目中爬蟲的運(yùn)行,scrapy框架有配套的部署工具,那就是scrapyd【注意,多了一個d】
這個scrapyd框架,負(fù)責(zé)運(yùn)行scrapyd項目,并且會記錄日志。他的主要功能有:
- 接收scrapy項目
- 查看scrapy項目爬蟲
- 啟動scrapy爬蟲
- 查看運(yùn)行中的scrapy
- 查看運(yùn)行結(jié)束的scrapy
功能夠多吧,且說實話,都非常實用。但是呢,操作比較蛋疼,雖然scrapyd提供web界面,但是只能看,不能管理,管理需要命令行,那這就.....不免讓大佬們心癢,紛紛推出了各自的Web管理工具,下文介紹。
那這里呢,來說下scrapy、scrapyd之間的耦合,以及其他的第三方庫。
所需庫的安裝【未展示scrapy的安裝,因為這里介紹部署,默認(rèn)你了解了scrapy的開發(fā)】:
- pip install scrapyd【運(yùn)行scrapy的容器】
- pip install scrapyd-client【用于打包scrapy項目到scrapyd中】
這里涉及到scrapyd和scrapyd-client兩個庫,前者是服務(wù)型,用于跑scrapy爬蟲的;后者是工具函數(shù),用于打包scrapy文件的;
3. Scrapyd-client介紹
在scrapyd-client安裝好之后呢,就有scrapy-deploy這個命令,但是你未必可以直接使用,可能會出現(xiàn)如下效果圖:

問:不是已經(jīng)安裝了scrapyd-client,為什么系統(tǒng)無法識別呢?這個是什么原因?qū)е碌哪兀?/p>
答:是因為呀,在scrapyd-client安裝的時候,提供了scrapyd-deploy的py文件,但是沒有后綴,所以系統(tǒng)不能直接識別
問:那怎么處理呢?
答:這個文件的路徑呢,是在你的Python安裝位置的Scripts目錄下,你需要在這里面,創(chuàng)建一個名為scrapyd-deploy.bat的文件,內(nèi)容是:
@echo off
C:/Users/kelly/Anaconda3/python.exe C:/Users/kelly/Anaconda3/Scripts/Scrapyd-deploy
Tips:
-
@echo off是關(guān)閉具體執(zhí)行命令輸出的意思,如果你是win系統(tǒng),可以去掉,對比看看 - 這里面的路徑,是我電腦上的Python路徑,需要改成你的Python路徑
- bat是win系統(tǒng)可直接執(zhí)行的文件,如果你的系統(tǒng)是Linux或Macos,需要寫sh或可執(zhí)行文件;
這個文件添加好之后,重開一個CMD【終端】,測試效果,如下截圖:

這個截圖說明命令行正常工作了,但是當(dāng)前的桌面目錄,不是一個有效的scrapy項目,即不在scrapy項目內(nèi)
那工具的安裝和測試,一切正常了,下面開始學(xué)習(xí)下scrapyd的作用
4. Scrapyd介紹
簡單來描述下,scrapy是一個項目,scrapyd是管理scrapy正常運(yùn)行的容器,可以停止、啟動、查看狀態(tài),當(dāng)然,這些都是命令行啟動【這是最大的缺陷】
當(dāng)然scrapyd也是可以配置的,配置文件在scrapyd庫里面,如下圖:

打開它,內(nèi)容是這樣的,#后面是添加的注釋:
[scrapyd]
eggs_dir = eggs
logs_dir = logs
items_dir =
jobs_to_keep = 5
dbs_dir = dbs
max_proc = 0
max_proc_per_cpu = 4 #同時運(yùn)行的最大進(jìn)程數(shù) = 4*核心數(shù)
finished_to_keep = 100
poll_interval = 5.0
bind_address = 127.0.0.1 #本機(jī)用 127.0.0.1,外網(wǎng)訪問改成 0.0.0.0
http_port = 6800 #默認(rèn)端口,可以改,或者多開
debug = off #調(diào)試模式,默認(rèn)關(guān)閉
runner = scrapyd.runner
application = scrapyd.app.application
launcher = scrapyd.launcher.Launcher
webroot = scrapyd.website.Root
[services]
schedule.json = scrapyd.webservice.Schedule
cancel.json = scrapyd.webservice.Cancel
addversion.json = scrapyd.webservice.AddVersion
listprojects.json = scrapyd.webservice.ListProjects
listversions.json = scrapyd.webservice.ListVersions
listspiders.json = scrapyd.webservice.ListSpiders
delproject.json = scrapyd.webservice.DeleteProject
delversion.json = scrapyd.webservice.DeleteVersion
listjobs.json = scrapyd.webservice.ListJobs
daemonstatus.json = scrapyd.webservice.DaemonStatus
上面都是默認(rèn)配置,通常改了端口或者綁定的IP,其余的都不用怎么修改。
修改好之后,打開CMD,進(jìn)入到桌面上,然后執(zhí)行scrapyd命令,服務(wù)就啟動了,如下圖:

在日志中,有個127.0.0.1:6800的連接,使用瀏覽器打開,有對應(yīng)的頁面,如下圖:

這就是正常的頁面了
嗯,沒錯,雖然丑,但也是他,就是他
好了,都正常了,那要怎么使用了?在這個界面上,有個curl http://localhost:6800/schedule.json -d project=default -d spider=somespider命令,沒錯,這就是驅(qū)使scrapyd工作的命令
挺崩潰的,雖然可以管理爬蟲,但是命令管理,難免讓人心煩.......有界面有按鈕的才是管理,這個是折磨
別急,界面管理,下次分享,這次先打基礎(chǔ),熟悉下而已
5. 學(xué)習(xí)使用命令部署爬蟲
在一切的開始前,我們需要先處理個東西,就是cfg文件,前面介紹過這是項目部署用的,現(xiàn)在在他里面改動一個內(nèi)容,如下:

去掉之后,這部署,才會有目標(biāo)地址
于此同時,scrapyd也需要打開,且url指定的地址,就可以訪問到scrapyd容器服務(wù)
然后在spbeen的項目目錄內(nèi),打開終端,輸入命令scrapyd-deploy --build-egg spbeen.egg 效果圖如下:

圖中有Server response(200)的字樣,說明爬蟲已經(jīng)部署上去了
那,要怎么看scrapyd的狀態(tài)呢?就那個丑的要死的界面,是沒辦法管理的
當(dāng)然是命令行控制了,再堅持一下,馬上就要學(xué)完了
6. 命令行調(diào)度
1、查看scrapyd目前的狀態(tài):
命令行:curl http://localhost:6800/daemonstatus.json
返回結(jié)果:{"node_name": "v-win10", "status": "ok", "pending": 0, "running": 0, "finished": 0}
2、列出Scrapyd中的項目
命令行:curl http://localhost:6800/listprojects.json
返回值:{"node_name": "v-win10", "status": "ok", "projects": ["spbeen"]}
3、查看項目中的爬蟲
命令行:curl http://localhost:6800/listspiders.json?project=spbeen
返回值:{"node_name": "v-win10", "status": "ok", "spiders": ["sp"]}
4、啟動爬蟲
命令行:curl http://localhost:6800/schedule.json -d project=spbeen -d spider=sp
返回值:{"node_name": "v-win10", "status": "ok", "jobid": "5514a540ad6811e98d0bd8c497f4e6f4"}
以上四個命令的配圖:

5、Scrapyd網(wǎng)頁界面的爬蟲執(zhí)行記錄和日志截圖

Scrapyd支持的命令行很多,貼個官方的API文檔鏈接:Scrapy官方連接
以上就是本篇文章的全部介紹內(nèi)容了
!放在最后
如果文章中有什么錯誤或者建議修改的地方,歡迎留言糾正和回復(fù)
如果你喜歡本篇文章,不妨關(guān)注一下我們的公眾號,每周更新兩篇原創(chuàng)技術(shù)文檔,都是干貨
