1. 程式人生 > >scrapy-redis(七):部署scrapy

scrapy-redis(七):部署scrapy

list 需要 ret clas egg 定義 jsb awl fcm

一般我們寫好scrapy爬蟲,如果需要啟動的話,需要進入scrapy項目的根目錄,然後運行以下命令:

scrapy crawl {spidername}

這樣我們就可以在終端查看到爬蟲信息了。但爬蟲運行狀態還需要給上級領導看,或者自己有空的時候就看看,總不可能想看的時候就登錄服務器。

下面就給大家介紹scrapy官方推薦的部署爬蟲項目的方法。
需要安裝scrapyd和scrapyd-client

對於scrapyd的安裝,極力建議大家不要使用pip安裝,而是直接從github去下載,然後使用setup安裝。而對於scrapyd-client的安裝,可以直接使用pip下載安裝。

配置scrapyd
下載完scrapyd之後,就需要進行配置。我這裏使用的ubuntu 14.04。按照scrapyd文檔介紹,我們需要建立一個文件,絕對路徑為/etc/scrapyd/scrapyd.conf。然後在文件內加入以下內容:

[scrapyd]
eggs_dir    = eggs
logs_dir    = logs
items_dir   =
jobs_to_keep = 5
dbs_dir     = dbs
max_proc    = 0
max_proc_per_cpu = 4
finished_to_keep = 100
poll_interval = 5.0
bind_address = 0.0.0.0
http_port   = 6800
debug       = off
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

上面這個是scrapyd上的默認配置文件,可以進行自定義的改動。具體請參考官方文檔。我前面說過不要使用pip安裝scrapyd,因為pypi上的scrapyd版本較低,在webservice這個模塊中是沒有DaemonStatus這個類的,所以就會報錯。

弄完配置文件,就可以直接在終端輸入sudo scrapyd。這樣就啟動了這個服務。記住這是個服務器,我們需要用scrapyd-client將爬蟲部署到scrapyd中。你會在終端看到下面的界面:
技術分享圖片

scrapyd-client
這一步非常的簡單,安裝完scrapyd-client之後,直接進入爬蟲所在的根目錄,打開scrapy.cfg文件。添加以下內容:

[deploy]
url = http://127.0.0.1:6800/ 
project = myspider
username = {name}
password = {passwd}
  • 1
  • 2
  • 3
  • 4
  • 5

然後在終端運行

scrapyd-deploy <target> -p <project>
  • 1

技術分享圖片
部署成功會看到上面的輸出

然後就會在根目錄生成一堆文件。
技術分享圖片

啟動scrapy

curl http://127.0.0.1:6800/schedule.json -d project=myspider -d spider=myspider

根據scrapyd的api,利用上面的命令即可啟動一個爬蟲。

取消一個爬蟲:

curl http://127.0.0.1:6800/cancel.json -d project=myspider -d job=566dba0ccc0711e6b95c000c294834b5

更多的api接口請參考scrapyd官方文檔。

瀏覽器中觀察爬蟲日誌
假設我們scrapyd服務運行的ip和port為192.168.1.1:6800。那麽我們就可以打開瀏覽器,查看爬蟲的抓取log.
技術分享圖片

在瀏覽器中輸入192.168.1.1:6800即可看到上面的頁面。點擊jobs,即可查看當前運行的爬蟲,點擊log,就可以查看當前爬蟲以及過去爬蟲的所有log。

技術分享圖片
上面是爬蟲的job,顯示已經完成了三個,有一個正在運行

技術分享圖片
上面是log,點擊進去有詳細的信息

技術分享圖片
這是一個正在運行的爬蟲的log

總結
至此,我們就全部部署好了一個爬蟲。比如我們平常使用的是windows,只要我們在windows上安裝了curl,那麽我們就可以以命令行的方式啟動停止部署在linux上的爬蟲,只要確保scrapyd這個服務在運行即可。

舉一個例子:
假設我們在測試環境,利用scrapy開發了5個爬蟲,分別對應5個不同的網站,比如,A網站,B網站,C網站,D網站,E網站。然後我們有5臺服務器,分別是a,b,c,d,e,我們需要把這5個爬蟲分別部署到5臺服務器上,當然,前提是需要在5臺服務器上安裝了scrapyd。
那麽,我們就可以利用scrapyd-client進行快速的部署。只要在這個5個不同的爬蟲根目錄的scrapy.cfg文件中加入下面這一段就可以了:

[deploy:local]
url = http://127.0.0.1:6800/ 
project = myspider
username = {name}
password = {passwd}

[deploy:a]
url = #服務器a中scrapyd監聽的ip和端口 
project = myspider
username = {name}
password = {passwd}

[deploy:b]
url = #服務器b中scrapyd監聽的ip和端口 
project = myspider
username = {name}
password = {passwd}

[deploy:c]
url = #服務器c中scrapyd監聽的ip和端口 
project = myspider
username = {name}
password = {passwd}

[deploy:d]
url = #服務器d中scrapyd監聽的ip和端口 
project = myspider
username = {name}
password = {passwd}

[deploy:e]
url = #服務器e中scrapyd監聽的ip和端口 
project = myspider
username = {name}
password = {passwd}

然後我們在scrapy項目的根目錄,執行scrapyd-deploy就可以把爬蟲部署到不同的服務器中了。有多少個單獨的爬蟲,就執行多少次。

運行爬蟲的話,我們只要利用curl命令就可以,假設我們想要啟動a,b,c,d,e這5臺服務器中的A網站的爬蟲:

curl http://a服務器scrapyd的ip:port/schedule.json -d project=A -d spider=myspider
curl http://b服務器scrapyd的ip:port/schedule.json -d project=A -d spider=myspider
curl http://c服務器scrapyd的ip:port/schedule.json -d project=A -d spider=myspider
curl http://d服務器scrapyd的ip:port/schedule.json -d project=A -d spider=myspider
curl http://e服務器scrapyd的ip:port/schedule.json -d project=A -d spider=myspider

上面的命令執行5次就可以了。

當然,我們可以寫一個python腳本,利用subprocess,可以節省重復性的工作。

scrapy-redis(七):部署scrapy