為什么要用Scrapyd?
Scrapyd是scrapinghub官方提供的爬蟲管理、部署施掏、監(jiān)控的方案之一,另一個(gè)是Scrapy Cloud茅糜。
官方對(duì)它的定義是
Scrapy Doc
Scrapyd is an application for deploying and running Scrapy spiders. It enables you to deploy (upload) your projects and control their spiders using a JSON API.
Scrapyd是一個(gè)部署和運(yùn)行Scrapy爬蟲的應(yīng)用程序七芭。它使你能夠通說(shuō)JSON API部署(上傳)工程,并且控制工程中的爬蟲蔑赘。
如果你像我一樣受夠了笨笨地手動(dòng)啟動(dòng)爬蟲狸驳,洋氣點(diǎn)兒叫manully (-__-)b
scrapy crawl SPIDER_NAME
并且對(duì)多個(gè)爬蟲的多進(jìn)程運(yùn)行、負(fù)載均衡等傷透了腦筋缩赛,那么Scrapyd是你的救星耙箍,快跟我一起使用吧!
最后峦筒,等項(xiàng)目完善了究西,我們把它部署到Scrapy Cloud上去,然后沏杯茶靜靜地看著爬蟲爬呀爬......o(▽)o
首先解決依賴
Python 2.6 or above
Twisted 8.0 or above
Scrapy 0.17 or above
然后安裝物喷,這里我推薦使用pip卤材。雖然我的部署環(huán)境是Ubuntu。但是我習(xí)慣使用pip安裝并管理Python依賴峦失,而不是apt-get扇丛。當(dāng)然你也可以全部使用apt-get。最忌諱的是pip和apt-get混用尉辑,管理起來(lái)你一定會(huì)奔潰的帆精,相信我。
pip install scrapyd
運(yùn)行Scrapyd服務(wù)
scrapyd
默認(rèn)情況下Scrapyd監(jiān)聽(tīng)0.0.0.0:6800端口隧魄,可以訪問(wèn)http://localhost:6800/查看卓练。
如果你像我一樣將Scrapyd安裝在服務(wù)器上,并且還沒(méi)有設(shè)置過(guò)驗(yàn)證方法购啄,可以將localhost替換為服務(wù)器外網(wǎng)IP地址襟企,同樣可以查看。
Warning: 危險(xiǎn)狮含!
我通過(guò)SSH遠(yuǎn)程登陸服務(wù)器工作顽悼。
為了防止SSH中斷連接使遠(yuǎn)程進(jìn)程終止曼振,推薦使用Screen管理每一條需要保持運(yùn)行的命令,包括Scrapyd蔚龙。Screen是Linux下的SSH遠(yuǎn)程會(huì)話管理工具冰评,必備神器!
screen -S scrapyd (啟動(dòng)一個(gè)新會(huì)話木羹,名字選你喜歡的甲雅,我習(xí)慣用進(jìn)程名嘱丢,在這里是scrapyd)
然后為了讓這個(gè)會(huì)話保持不退出侣诺,使用快捷鍵
CTRL + A + D
同時(shí)按這四個(gè)鍵你會(huì)回到screen命令之前的終端。
可以查看當(dāng)前所有screen
screen -ls
以后要想回到我們用啟動(dòng)的會(huì)話
screen -r scrapyd
為所欲為吧校坑!
再也不用擔(dān)心終端進(jìn)程意外懷孕穷遂,哦不函匕,意外退出了!
但是#
生產(chǎn)環(huán)境部署scrapyd服務(wù)的話要使用更專業(yè)的進(jìn)程管理工具蚪黑,例如Supervisor盅惜,參考
部署Scrapy項(xiàng)目
難道又要像我之前一樣蠢萌蠢萌地manully deploy?(-__-)b
Of course NOT忌穿!(●'?'●)
官方推薦使用scrapyd-deploy tool--scrapyd-client
安裝
pip install scrapyd-client
之后我們就可以使用一個(gè)超方便的scrapyd-deploy命令了抒寂。
該命令通過(guò)讀取scrapy項(xiàng)目目錄下的配置文件scrapy.cfg來(lái)獲取項(xiàng)目信息。
每一個(gè)scrapy.cfg對(duì)于scrapyd來(lái)說(shuō)都是一個(gè)target掠剑。所以我們需要先編輯scrapy.cfg文件
[deploy:NAME]
如果你只有一個(gè)deploy配置那么可以不寫NAME
但是如果你需要在多個(gè)遠(yuǎn)程服務(wù)器或者多個(gè)scrapyd進(jìn)程上部署的話
應(yīng)該為不同的deploy命名屈芜,方便部署。
查看當(dāng)前項(xiàng)目下的所有配置文件可以用命令
scrapyd-deploy -l
url = http://localhost:6800/
project = PROJECT_NAME用于驗(yàn)證登陸scrapyd服務(wù)器朴译,如果scrapyd沒(méi)做驗(yàn)證井佑,那么為空(默認(rèn)不做驗(yàn)證,生產(chǎn)環(huán)境必須加驗(yàn)證C呤佟)
username = user
password = passwd
scrapyd-deploy [deploy_name]
deploy_name對(duì)應(yīng)上述配置文件中的配置名
如果你沒(méi)有為配置命名那么可以為空躬翁,表示使用默認(rèn)配置,默認(rèn)配置名為default
使用API
啟動(dòng)一個(gè)爬蟲
curl http://localhost:6800/schedule.json -d project=PROJECT_NAME -d spider=SPIDER_NAME
停止一個(gè)爬蟲
curl http://localhost:6800/cancel.json -d project=PROJECT_NAME -d job=JOB_ID
JOB_ID可以很方便地從web控制臺(tái)獲得
其他更多API
前文配置文件里我們提到了scrapd通過(guò)http驗(yàn)證登陸盯拱,可是遺憾的是截至發(fā)文盒发,scrapyd本身是不支持的。參考
我知道你打不開(kāi)Google的鏈接狡逢,(●ˇ?ˇ●)
大體摘錄如下
The authentication is for deploying the code, not for accesing the UI.Also, even though "scrapy deploy" does support using HTTP auth, Scrapyd doesn'tsupport it yet. To add HTTP auth to Scrapyd you need to host it behind a proxythat provides the auth.
可行的解決方案是將scrapyd服務(wù)掛在ngix后宁舰,讓ngix負(fù)責(zé)驗(yàn)證工作。
參考ngix配置如下
# Scrapyd local proxy for basic authentication.
# Don't forget iptables rule.
# iptables -A INPUT -p tcp --destination-port 6800 -s ! 127.0.0.1 -j DROP
server {
listen 6801;
location ~ /\.ht {
deny all;
}
location / {
proxy_pass http://localhost:6800/;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/conf.d/.htpasswd;
}
}