scrapyd和scrapyd-client使用教程

scrapyd是一個用于部署和運行scrapy爬蟲的程序篡九,它允許你通過JSON?API來部署爬蟲項目和控制爬蟲運行

項目和版本

scrapyd可以管理多個項目蚣抗,并且每個項目允許有多個版本,但是只有最新的版本會被用來運行爬蟲.

最方便的版本管理就是利用VCS工具來記錄你的爬蟲代碼瓮下,版本比較不是簡單的通過字母排序翰铡,而是通過智能的算法,和distutils一樣讽坏,例如:?r10比r9更大

工作原理

scrapyd是一個守護進程锭魔,監(jiān)聽爬蟲的運行和請求,然后啟動進程來執(zhí)行它們

啟動服務(wù)

# 注意路呜,啟動scrapyd的目錄會保存整個scrapyd運行期間生成的log, item文件迷捧,所以請選擇合適的位置運行該命令$ scrapyd

調(diào)度爬蟲運行

$ curl http://localhost:6800/schedule.json -dproject=myproject -dspider=spider2{"status":"ok","jobid":"26d1b1a6d6f111e0be5c001e648c57f8"}

web接口

http://localhost:6800/

安裝

需求

Python?2.6+

Twisted?8.0+

Scrapy?0.17+

安裝

$ pip install scrapyd

$ sudo apt-get install scrapyd

項目部署

直接使用scrapyd-client提供的scrapyd-deploy工具.

安裝scrapyd-client

$ pip install scrapyd-client

scrapyd-client工作原理

打包項目织咧,然后調(diào)用scrapyd的addversion.json接口部署項目

配置服務(wù)器信息

為了方便敘述,整個部署流程以部署豆瓣電影爬蟲為例漠秋。 配置服務(wù)器和項目信息, 需要編輯scrapy.cfg文件笙蒙,添加如下內(nèi)容

[deploy:server-douban]url=http://localhost:6800/

其中server-douban為服務(wù)器名稱,?url為服務(wù)器地址,即運行了scrapyd命令的服務(wù)器庆锦。

檢查配置,?列出當前可用的服務(wù)器

$ scrapyd-deploy -lserver-douban? ? ? ? http://localhost:6800/

列出服務(wù)器上所有的項目, 需要確保服務(wù)器上的scrapyd命令正在執(zhí)行捅位,否則會報連接失敗.首次運行的話,可以看到只有一個default項目

$ scrapyd-deploy -L server-doubandefault

打開http://localhost:6800/, 可以看到Available projects: default

部署項目

在爬蟲項目根目錄下執(zhí)行下面的命令, 其中target為上一步配置的服務(wù)器名稱搂抒,project為項目名稱艇搀,可以根據(jù)實際情況自己指定。

scrapyd-deploy -p

$ scrapyd-deploy server-douban -p douban-moviesPacking version1446102534Deploying to project"douban-movies"in http://localhost:6800/addversion.jsonServer response(200):{"status":"ok","project":"douban-movies","version":"1446102534","spiders":1,"node_name":"sky"}

部署操作會打包你的當前項目求晶,如果當前項目下有setup.py文件焰雕,就會使用它,沒有的會就會自動創(chuàng)建一個芳杏。(如果后期項目需要打包的話矩屁,可以根據(jù)自己的需要修改里面的信息,也可以暫時不管它).?從返回的結(jié)果里面爵赵,我們可以看到部署的狀態(tài)档插,項目名稱,版本號和爬蟲個數(shù)亚再,以及當前的主機名稱.

檢查部署結(jié)果

$ scrapyd-deploy -L server-doubandefaultdouban-movies

或再次打開http://localhost:6800/, 也可以看到Available projects: default, douban-movies

我們也可以把項目信息寫入到配置文件中郭膛,部署時就不用指定項目信息,編輯scrapy.cfg文件氛悬,添加項目信息

[deploy:server-douban]url=http://localhost:6800/project=douban-movies

下次部署可以直接執(zhí)行

$ scrapyd-deploy

如果配置了多個服務(wù)器的話则剃,可以將項目直接部署到多臺服務(wù)器

$ scrapyd-deploy -a -p

指定版本號

默認情況下,?scrapyd-deploy使用當前的時間戳作為版本號,我們可以使用--version來指定版本號

scrapyd-deploy -p --version

版本號的格式必須滿足LooseVersion

如:

# 設(shè)置版本號為0.1$ scrapyd-deploy server-douban -p douban-movies --version0.1Packing version0.1Deploying to project"douban-movies"in http://localhost:6800/addversion.jsonServer response(200):{"status":"ok","project":"douban-movies","version":"0.1","spiders":1,"node_name":"sky"}

如果使用了Mercurial或Git管理代碼如捅, 可以使用HG和GIT作為version的參數(shù)棍现,也可以將它寫入scrapy.cfg文件,那么就會使用當前的reversion作為版本號镜遣。

[deploy:target]...version=GIT

$ cat scrapy.cfg...[deploy:server-douban]url=http://localhost:6800/project=douban-moviesversion=GIT

# 當前版本號為r7-master

$ scrapyd-deploy server-douban -p douban-movies fatal: No names found, cannot describe anything.Packing version r7-masterDeploying to project"douban-movies"in http://localhost:6800/addversion.jsonServer response(200):{"status":"ok","project":"douban-movies","version":"r7-master","spiders":1,"node_name":"sky"}

關(guān)于從GIT獲取版本號的方式己肮,可以參看scrapyd-client源碼部分

elifversion=='GIT':p=Popen(['git','describe'],stdout=PIPE)d=p.communicate()[0].strip('\n')ifp.wait()!=0:p=Popen(['git','rev-list','--count','HEAD'],stdout=PIPE)d='r%s'%p.communicate()[0].strip('\n')p=Popen(['git','rev-parse','--abbrev-ref','HEAD'],stdout=PIPE)b=p.communicate()[0].strip('\n')return'%s-%s'%(d,b)

服務(wù)器添加認證信息

我們也可以在scrapyd前面加一層反向代理來實現(xiàn)用戶認證。以nginx為例,?配置nginx

server{listen6801;location/{proxy_passhttp://127.0.0.1:6800/;auth_basic"Restricted";auth_basic_user_file/etc/nginx/htpasswd/user.htpasswd;}}

/etc/nginx/htpasswd/user.htpasswd里設(shè)置的用戶名和密碼都是test?修改配置文件悲关,添加用戶信息信息

...[deploy:server-douban]url = http://localhost:6801/project = douban-moviesversion = GITusername = testpassword = test

注意上面的url已經(jīng)修改為了nginx監(jiān)聽的端口谎僻。

提醒: 記得修改服務(wù)器上scrapyd的配置bind_address字段為127.0.0.1,以免可以從外面繞過nginx, 直接訪問6800端口寓辱。?關(guān)于配置可以參看本文后面的配置文件設(shè)置.

API

scrapyd的web界面比較簡單艘绍,主要用于監(jiān)控,所有的調(diào)度工作全部依靠接口實現(xiàn). 具體可以參考官方文檔

常用接口:

調(diào)度爬蟲

$ curl http://localhost:6800/schedule.json -dproject=myproject -dspider=somespider

# 帶上參數(shù)

$ curl http://localhost:6800/schedule.json -dproject=myproject -dspider=somespider -dsetting=DOWNLOAD_DELAY=2-darg1=val1

取消

$ curl http://localhost:6800/cancel.json -dproject=myproject -djob=6487ec79947edab326d6db28a2d86511e8247444

列出項目

$ curl http://localhost:6800/listprojects.json

列出版本

$ curl http://localhost:6800/listversions.json?project=myproject

列出爬蟲

$ curl http://localhost:6800/listspiders.json?project=myproject

列出job

$ curl http://localhost:6800/listjobs.json?project=myproject

刪除版本

$ curl http://localhost:6800/delversion.json -dproject=myproject -dversion=r99

刪除項目

$ curl http://localhost:6800/delproject.json -dproject=myproject

配置文件

scrapyd啟動的時候會自動搜索配置文件秫筏,配置文件的加載順序為

/etc/scrapyd/scrapyd.conf

/etc/scrapyd/conf.d/*

scrapyd.conf

~/.scrapyd.conf

最后加載的會覆蓋前面的設(shè)置

默認配置文件如下,?可以根據(jù)需要修改

[scrapyd]eggs_dir=eggslogs_dir=logsitems_dir=itemsjobs_to_keep=5dbs_dir=dbsmax_proc=0max_proc_per_cpu=4finished_to_keep=100poll_interval=5http_port=6800debug=offrunner=scrapyd.runnerapplication=scrapyd.app.applicationlauncher=scrapyd.launcher.Launcher[services]schedule.json=scrapyd.webservice.Schedulecancel.json=scrapyd.webservice.Canceladdversion.json=scrapyd.webservice.AddVersionlistprojects.json=scrapyd.webservice.ListProjectslistversions.json=scrapyd.webservice.ListVersionslistspiders.json=scrapyd.webservice.ListSpidersdelproject.json=scrapyd.webservice.DeleteProjectdelversion.json=scrapyd.webservice.DeleteVersionlistjobs.json=scrapyd.webservice.ListJobs

關(guān)于配置的各個參數(shù)具體含義诱鞠,可以參考官方文檔

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末挎挖,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子航夺,更是在濱河造成了極大的恐慌蕉朵,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件阳掐,死亡現(xiàn)場離奇詭異始衅,居然都是意外死亡,警方通過查閱死者的電腦和手機锚烦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來帝雇,“玉大人涮俄,你說我怎么就攤上這事∈ⅲ” “怎么了彻亲?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長吮廉。 經(jīng)常有香客問我苞尝,道長,這世上最難降的妖魔是什么宦芦? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任宙址,我火速辦了婚禮,結(jié)果婚禮上调卑,老公的妹妹穿的比我還像新娘抡砂。我一直安慰自己,他們只是感情好恬涧,可當我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布注益。 她就那樣靜靜地躺著,像睡著了一般溯捆。 火紅的嫁衣襯著肌膚如雪丑搔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天提揍,我揣著相機與錄音啤月,去河邊找鬼。 笑死劳跃,一個胖子當著我的面吹牛顽冶,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播售碳,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼强重,長吁一口氣:“原來是場噩夢啊……” “哼绞呈!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起间景,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤佃声,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后倘要,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體圾亏,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年封拧,在試婚紗的時候發(fā)現(xiàn)自己被綠了志鹃。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡泽西,死狀恐怖曹铃,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情捧杉,我是刑警寧澤陕见,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站味抖,受9級特大地震影響评甜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜仔涩,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一忍坷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧熔脂,春花似錦承匣、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至零聚,卻和暖如春袍暴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背隶症。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工政模, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蚂会。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓淋样,卻偏偏與公主長得像,于是被迫代替她去往敵國和親胁住。 傳聞我的和親對象是個殘疾皇子趁猴,可洞房花燭夜當晚...
    茶點故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 春暖花開樹漸綠刊咳, 藍天白云闊長空。 輕騎匆匆歸鄉(xiāng)家儡司, 張開視野悅心胸娱挨! 2017.4.2,拙文 附:從上午到晚上捕犬,...
    白豐閣閱讀 126評論 2 2
  • 第二遍寫出了一點小bug. 一是要注意一定要寫LinkedList 跷坝,不要寫List<>,因為LinkedList...
    greatseniorsde閱讀 239評論 0 0