使用Scrapyd部署爬蟲


為什么要用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是一個部署和運行Scrapy爬蟲的應用程序。它使你能夠通說JSON API部署(上傳)工程,并且控制工程中的爬蟲。

如果你像我一樣受夠了笨笨地手動啟動爬蟲,洋氣點兒叫manully (-__-)b

scrapy crawl SPIDER_NAME

并且對多個爬蟲的多進程運行、負載均衡等傷透了腦筋,那么Scrapyd是你的救星,快跟我一起使用吧!
最后,等項目完善了,我們把它部署到Scrapy Cloud上去,然后沏杯茶靜靜地看著爬蟲爬呀爬......o()o


首先解決依賴

Python 2.6 or above
Twisted 8.0 or above
Scrapy 0.17 or above

然后安裝,這里我推薦使用pip。雖然我的部署環(huán)境是Ubuntu。但是我習慣使用pip安裝并管理Python依賴,而不是apt-get。當然你也可以全部使用apt-get。最忌諱的是pip和apt-get混用,管理起來你一定會奔潰的,相信我。

pip install scrapyd

運行Scrapyd服務

scrapyd

默認情況下Scrapyd監(jiān)聽0.0.0.0:6800端口,可以訪問http://localhost:6800/查看。
如果你像我一樣將Scrapyd安裝在服務器上,并且還沒有設置過驗證方法,可以將localhost替換為服務器外網(wǎng)IP地址,同樣可以查看。
Warning: 危險!
我通過SSH遠程登陸服務器工作。
為了防止SSH中斷連接使遠程進程終止,推薦使用Screen管理每一條需要保持運行的命令,包括Scrapyd。Screen是Linux下的SSH遠程會話管理工具,必備神器!

screen -S scrapyd (啟動一個新會話,名字選你喜歡的,我習慣用進程名,在這里是scrapyd)

然后為了讓這個會話保持不退出,使用快捷鍵

CTRL + A + D

同時按這四個鍵你會回到screen命令之前的終端。
可以查看當前所有screen

screen -ls

以后要想回到我們用啟動的會話

screen -r scrapyd

為所欲為吧!
再也不用擔心終端進程意外懷孕,哦不,意外退出了!

但是#

生產(chǎn)環(huán)境部署scrapyd服務的話要使用更專業(yè)的進程管理工具,例如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
但是如果你需要在多個遠程服務器或者多個scrapyd進程上部署的話
應該為不同的deploy命名,方便部署。
查看當前項目下的所有配置文件可以用命令

scrapyd-deploy -l

url = http://localhost:6800/
project = PROJECT_NAME

用于驗證登陸scrapyd服務器,如果scrapyd沒做驗證,那么為空(默認不做驗證,生產(chǎn)環(huán)境必須加驗證!)
username = user
password = passwd

scrapyd-deploy [deploy_name]

deploy_name對應上述配置文件中的配置名
如果你沒有為配置命名那么可以為空,表示使用默認配置,默認配置名為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服務掛在ngix后,讓ngix負責驗證工作。
參考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;
        }
}
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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