為什么要用Scrapyd?
Scrapyd是scrapinghub官方提供的爬蟲管理、部署、監(jiān)控的方案之一,另一個是Scrapy Cloud。
官方對它的定義是
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是一個部署和運(yùn)行Scrapy爬蟲的應(yīng)用程序。它使你能夠通說JSON API部署(上傳)工程,并且控制工程中的爬蟲。
如果你像我一樣受夠了笨笨地手動啟動爬蟲,洋氣點兒叫manully (-__-)b
scrapy crawl SPIDER_NAME
并且對多個爬蟲的多進(jìn)程運(yùn)行、負(fù)載均衡等傷透了腦筋,那么Scrapyd是你的救星,快跟我一起使用吧!
最后,等項目完善了,我們把它部署到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混用,管理起來你一定會奔潰的,相信我。
pip install scrapyd
運(yùn)行Scrapyd服務(wù)
scrapyd
默認(rèn)情況下Scrapyd監(jiān)聽0.0.0.0:6800端口,可以訪問http://localhost:6800/查看。
如果你像我一樣將Scrapyd安裝在服務(wù)器上,并且還沒有設(shè)置過驗證方法,可以將localhost替換為服務(wù)器外網(wǎng)IP地址,同樣可以查看。
Warning: 危險!
我通過SSH遠(yuǎn)程登陸服務(wù)器工作。
為了防止SSH中斷連接使遠(yuǎn)程進(jìn)程終止,推薦使用Screen管理每一條需要保持運(yùn)行的命令,包括Scrapyd。Screen是Linux下的SSH遠(yuǎn)程會話管理工具,必備神器!
screen -S scrapyd (啟動一個新會話,名字選你喜歡的,我習(xí)慣用進(jìn)程名,在這里是scrapyd)
然后為了讓這個會話保持不退出,使用快捷鍵
CTRL + A + D
同時按這四個鍵你會回到screen命令之前的終端。
可以查看當(dāng)前所有screen
screen -ls
以后要想回到我們用啟動的會話
screen -r scrapyd
為所欲為吧!
再也不用擔(dān)心終端進(jìn)程意外懷孕,哦不,意外退出了!
但是#
生產(chǎn)環(huán)境部署scrapyd服務(wù)的話要使用更專業(yè)的進(jìn)程管理工具,例如Supervisor,參考
部署Scrapy項目
難道又要像我之前一樣蠢萌蠢萌地manully deploy?(-__-)b
Of course NOT!(●'?'●)
官方推薦使用scrapyd-deploy tool--scrapyd-client
安裝
pip install scrapyd-client
之后我們就可以使用一個超方便的scrapyd-deploy命令了。
該命令通過讀取scrapy項目目錄下的配置文件scrapy.cfg來獲取項目信息。
每一個scrapy.cfg對于scrapyd來說都是一個target。所以我們需要先編輯scrapy.cfg文件
[deploy:NAME]
如果你只有一個deploy配置那么可以不寫NAME
但是如果你需要在多個遠(yuǎn)程服務(wù)器或者多個scrapyd進(jìn)程上部署的話
應(yīng)該為不同的deploy命名,方便部署。
查看當(dāng)前項目下的所有配置文件可以用命令
scrapyd-deploy -l
url = http://localhost:6800/
project = PROJECT_NAME用于驗證登陸scrapyd服務(wù)器,如果scrapyd沒做驗證,那么為空(默認(rèn)不做驗證,生產(chǎn)環(huán)境必須加驗證?。?br> username = user
password = passwd
scrapyd-deploy [deploy_name]
deploy_name對應(yīng)上述配置文件中的配置名
如果你沒有為配置命名那么可以為空,表示使用默認(rèn)配置,默認(rèn)配置名為default
使用API
啟動一個爬蟲
curl http://localhost:6800/schedule.json -d project=PROJECT_NAME -d spider=SPIDER_NAME
停止一個爬蟲
curl http://localhost:6800/cancel.json -d project=PROJECT_NAME -d job=JOB_ID
JOB_ID可以很方便地從web控制臺獲得
其他更多API
前文配置文件里我們提到了scrapd通過http驗證登陸,可是遺憾的是截至發(fā)文,scrapyd本身是不支持的。參考
我知道你打不開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é)驗證工作。
參考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;
}
}