scrapy-redis(七):部署scrapy
一般我們寫好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