scrapyd 是由scrapy 官方提供的爬蟲管理工具,使用它我們可以非常方便地上傳、控制爬蟲並且查看運行日誌。
參考官方文檔:http://scrapyd.readthedocs.org/en/latest/api.html
使用scrapyd 和我們直接運行 scrapy crawl myspider
有什麼區別呢?
scrapyd 同樣是通過上面的命令運行爬蟲的,不同的是它提供一個JSON web service 監聽的請求,我們可以從任何一臺可以連接到服務器的電腦發送請求安排爬蟲運行,或者停止正在運行的爬蟲。甚至,我們可以使用它提供的API上傳新爬蟲而不必登錄到服務器上進行操作。
安裝scrapyd
pip install scrapyd
參考文檔:https://github.com/scrapy/scrapyd-client
運行scrapyd 服務
直接運行命令scrapyd即可:
scrapyd
運行scrapy出現-bash: scrapyd: command not found 錯誤的解決辦法:
- 進入 PYTHON_HOME\bin 目錄查看 scrapyd 命令是否存在;
- 爲scrapyd命令創建軟連接 ln -s PYTHON_HOME/bin/scrapyd /usr/bin/scrapyd
默認情況下scrapyd 監聽 127.0.0.1:6800
端口,運行scrapyd 後在瀏覽器 http://localhost:6800/
即可查看到當前可以運行的項目:
如果需要遠程訪問Web界面,需要修改一下 /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 = 10
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
部署scrapy 項目
直接使用scrapyd-client
提供的scrapyd-deploy
工具。
pip install scrapyd-client
直接在項目根目錄,修改工程目錄下的 scrapy.cfg 文件:
[deploy:slaver1] #默認情況下並沒有slaver1,它只是一個名字,可以在配置文件中寫多個名字不同的deploy
url = http://scrapyd.mydomain.com/api/scrapyd/ #要部署項目的服務器的地址
username = john #訪問服務器所需的用戶名和密碼(如果不需要密碼可以不寫)
password = secret
其中的username 和 password 用於在部署時驗證服務器的HTTP basic authentication,須要注意的是這裏的用戶密碼並不表示訪問該項目須要驗證,而是登錄服務器用的。
下面是一個配置示例:
[settings]
default = tianmao.settings
[deploy:slaver1]
url = http://localhost:6800/
project = tianmao
[deploy:slaver2]
url = http://172.16.250.238:6800/
project = tianmao
部署項目到服務器
直接在項目根目錄,執行下面命令:
scrapyd-deploy slaver1 -p tianmao
部署操作會打包你的當前項目,如果當前項目下有setup.py文件,就會使用它,沒有的會就會自動創建一個。(如果後期項目需要打包的話,可以根據自己的需要修改裏面的信息,也可以暫時不管它).從返回的結果裏面,可以看到部署的狀態,項目名稱,版本號和爬蟲個數,以及當前的主機名稱.
查看項目spider
通過scrapyd-deploy -l 查看當前目錄下的可以使用的部署方式(target)。
scrapy list
scrapyd-deploy -l
列出服務器上所有的項目,檢查tutorial_deploy
是否已經部署上去了。
scrapyd-deploy -L slaver1
tianmao
API
scrapyd的web界面比較簡單,主要用於監控,所有的調度工作全部依靠接口實現。
參考官方文檔:http://scrapyd.readthedocs.org/en/stable/api.html
開啓爬蟲 schedule
curl http://localhost:6800/schedule.json -d project=tianmao -d spider=tm
注意:執行時 cd 到項目根目錄執行
C:\Users\pjli\Desktop\pyworks\tianmao>curl http://localhost:6800/schedule.json -d project=tianmao -d spider=tm
{"node_name": "1000-PJLI", "status": "ok", "jobid": "4bbdd7d494f011ea99cf54e1ad47f97c"}
停止 cancel
curl http://localhost:6800/cancel.json -d project=tianmao -d job=e09e09c694f411ea8ec254e1ad47f97c
列出爬蟲
curl http://localhost:6800/listspiders.json?project=tianmao
刪除項目
curl http://localhost:6800/delproject.json -d project=tianmao
更新
對於scrapyd默認項目(即是啓動scrapyd命令後看到的default項目):
- 只有在scrapy項目裏啓動scrapyd命令時纔有默認項目,默認項目就是當前的scrapy項目
- 如果在非scrapy項目下執行scrapyd, 是看不到default的