5一、scrapyd部署scrapy項目

百度雲搜索,搜各類資料:http://www.lqkweb.com
搜網盤,搜各類資料:http://www.swpan.cn

scrapyd模塊是專門用於部署scrapy項目的,能夠部署和管理scrapy項目**html

下載地址:https://github.com/scrapy/scr...python

建議安裝git

pip3 install scrapyd

首先安裝scrapyd模塊,安裝後在Python的安裝目錄下的Scripts文件夾裏會生成scrapyd.exe啓動文件,若是這個文件存在說明安裝成功,咱們就能夠執行命令了**github

啓動scrapyd服務web

在命令輸入:scrapyd

image

如圖說明啓動成功,關閉或者退出命令窗口,由於咱們正真的使用是在指定的啓動目錄下啓動服務的數據庫

指定啓動*服務目錄啓動服務*json

從新打開命令,cd進入要指定服務的目錄後,執行命令scrapyd啓動服務windows

image

此時能夠看到啓動目錄裏生成了dbs目錄api

image

dbs目錄裏是空的什麼都沒有服務器

此時咱們須要安裝scrapyd-client模塊

scrapyd-client模塊是專門打包scrapy爬蟲項目到scrapyd服務中的

下載目錄:https://github.com/scrapy/scr...

建議安裝

pip3 install scrapyd-client

安裝後在Python的安裝目錄下的Scripts文件夾裏會生成scrapyd-deploy無後綴文件,若是有此文件說明安裝成功

重點說明:這個scrapyd-deploy無後綴文件是啓動文件,在Linux系統下能夠遠行,在windows下是不能運行的,因此咱們須要編輯一下使其在windows能夠運行**

 image

在此目錄裏新建一個scrapyd-deploy.bat文件,注意名稱必定要和scrapyd-deploy相同,咱們編輯這個bat文件使其在windows能夠運行

image

scrapyd-deploy.bat文件編輯

設置python執行文件路徑和scrapyd-deploy無後綴文件路徑

@echo off
"C:\Users\admin\AppData\Local\Programs\Python\Python35\python.exe" "C:\Users\admin\AppData\Local\Programs\Python\Python35\Scripts\scrapyd-deploy" %1 %2 %3 %4 %5 %6 %7 %8 %9

scrapyd-deploy.bat文件編輯好後,打開命令窗口cd 到scrapy項目中有scrapy.cfg文件的目錄,而後執行scrapyd-deploy命令,看看咱們編輯的scrapyd-deploy.bat文件是否能夠執行

若是下圖表示能夠執行

 image

設置scrapy項目中的scrapy.cfg文件,這個文件就是給scrapyd-deploy使用的

 scrapy.cfg文件

注意:下面的中文備註不能寫在裏面,否則會報錯,這寫的備註只是方便知道怎麼設置

# Automatically created by: scrapy startproject
#
# For more information about the [deploy] section see:
# https://scrapyd.readthedocs.org/en/latest/deploy.html

[settings]
default = adc.settings

[deploy:bobby]                      #設置部署名稱bobby
url = http://localhost:6800/        #開啓url
project = adc                       #項目名稱

命令窗口輸入:scrapyd-deploy -l     啓動服務,能夠看到咱們設置的部署名稱

image

開始打包前,執行一個命令:scrapy list   ,這個命令執行成功說明能夠打包了,若是沒執行成功說明還有工做沒完成

注意執行 scrapy list  命令的時候頗有可能出現錯誤,若是是python沒法找到scrapy項目,須要在scrapy項目裏的settings.py配置文件裏設置成python可識別路徑*

# 將當前項目的一級目錄adc目錄添加到python能夠識別目錄中
BASE_DIR = os.path.dirname(os.path.abspath(os.path.dirname(__file__)))
sys.path.insert(0, os.path.join(BASE_DIR, 'adc'))

image

若是錯誤提示,什麼遠程計算機拒絕,說明你的scrapy項目有連接遠程計算機,如連接數據庫或者elasticsearch(搜索引擎)之類的,須要先將連接服務器啓動**

 執行 scrapy list  命令返回了爬蟲名稱說明一切ok了,以下圖**

image

到此咱們就能夠開始打包scrapy項目到scrapyd了,用命令結合scrapy項目中的scrapy.cfg文件設置來打包**

scrapy.cfg文件

# Automatically created by: scrapy startproject
#
# For more information about the [deploy] section see:
# https://scrapyd.readthedocs.org/en/latest/deploy.html

[settings]
default = adc.settings

[deploy:bobby]                      #設置部署名稱bobby
url = http://localhost:6800/        #開啓url
project = adc                       #項目名稱

執行打包命令: scrapyd-deploy 部署名稱 -p 項目名稱

如:scrapyd-deploy bobby -p adc

以下顯示錶示scrapy項目打包成功**

image

scrapy項目打包成功後說明

scrapy項目打包成功後會在scrapyd啓動服務的目錄生成相應的文件,以下:*

一、會在scrapyd啓動服務的目錄下的dbs文件夾生成scrapy項目名稱.db*

image

二、會在scrapyd啓動服務的目錄下的eggs文件夾生成scrapy項目名稱的文件夾,裏面是一個scrapyd-deploy打包生成的名稱.egg*

image

三、會將scrapy爬蟲項目打包,在scrapy項目裏會生成兩個文件夾,build文件夾和project.egg-info文件夾

build文件夾裏是打包後的爬蟲項目,scrapyd之後遠行的就是這個打包後的項目*

project.egg-info文件夾裏是打包時的一些配置

說明:scrapyd-deploy只負責將scrapy爬蟲項目打包給scrapyd部署,只須要打包一次,打包後,之後的啓動爬蟲,中止爬蟲等scrapy項目管理由scrapyd來完成**

scrapyd管理scrapy項目

注意:scrapyd管理用的 curl 命令,curl命令不支持windows系統,只支持Linux系統,因此在windows系統下咱們用cmder來執行命令一、遠行爬蟲,遠行指定scrapy下面的指定爬蟲

curl http://localhost:6800/schedule.json -d project=scrapy項目名稱 -d spider=爬蟲名稱
如:
curl http://localhost:6800/schedule.json -d project=adc -d spider=lagou

image

image

二、中止爬蟲

curl http://localhost:6800/cancel.json -d project=scrapy項目名稱 -d job=遠行ID
如:
curl http://localhost:6800/cancel.json -d project=adc -d job=5454948c93bf11e7af0040167eb10a7b

image

image

三、刪除scrapy項目

注意:通常刪除scrapy項目,須要先執行命令中止項目下在遠行的爬蟲**

刪除項目後會刪除scrapyd啓動服務的目錄下的eggs文件夾生成egg文件,須要從新用scrapyd-deploy打包後才能再次運行

curl http://localhost:6800/delproject.json -d project=scrapy項目名稱
若是:
curl http://localhost:6800/delproject.json -d project=adc

image

四、查看有多少個scrapy項目在api中

image

五、查看指定的scrapy項目中有多少個爬蟲

curl http://localhost:6800/listspiders.json?project=scrapy項目名稱
如:
curl http://localhost:6800/listspiders.json?project=adc

image

scrapyd支持的API 介紹

 scrapyd支持一系列api,下面用一個py文件來介紹

# -*- coding: utf-8 -*-

import requests
import json 

baseUrl ='http://127.0.0.1:6800/'
daemUrl ='http://127.0.0.1:6800/daemonstatus.json'
listproUrl ='http://127.0.0.1:6800/listprojects.json'
listspdUrl ='http://127.0.0.1:6800/listspiders.json?project=%s'
listspdvUrl= 'http://127.0.0.1:6800/listversions.json?project=%s'
listjobUrl ='http://127.0.0.1:6800/listjobs.json?project=%s'
delspdvUrl= 'http://127.0.0.1:6800/delversion.json'

#http://127.0.0.1:6800/daemonstatus.json
#查看scrapyd服務器運行狀態
r= requests.get(daemUrl)
print '1.stats :\n %s \n\n'  %r.text  

#http://127.0.0.1:6800/listprojects.json
#獲取scrapyd服務器上已經發布的工程列表
r= requests.get(listproUrl)
print '1.1.listprojects : [%s]\n\n'  %r.text
if len(json.loads(r.text)["projects"])>0 :
    project = json.loads(r.text)["projects"][0]

#http://127.0.0.1:6800/listspiders.json?project=myproject
#獲取scrapyd服務器上名爲myproject的工程下的爬蟲清單
listspd=listspd % project
r= requests.get(listspdUrl)
print '2.listspiders : [%s]\n\n'  %r.text 
if json.loads(r.text).has_key("spiders")>0 :
    spider =json.loads(r.text)["spiders"][0]

#http://127.0.0.1:6800/listversions.json?project=myproject
##獲取scrapyd服務器上名爲myproject的工程下的各爬蟲的版本
listspdvUrl=listspdvUrl % project
r = requests.get(listspdvUrl)
print '3.listversions : [%s]\n\n'  %rtext 
if len(json.loads(r.text)["versions"])>0 :
    version = json.loads(r.text)["versions"][0]

#http://127.0.0.1:6800/listjobs.json?project=myproject
#獲取scrapyd服務器上的全部任務清單,包括已結束,正在運行的,準備啓動的。
listjobUrl=listjobUrl % proName
r=requests.get(listjobUrl)
print '4.listjobs : [%s]\n\n'  %r.text 

#schedule.json
#http://127.0.0.1:6800/schedule.json -d project=myproject -d spider=myspider
#啓動scrapyd服務器上myproject工程下的myspider爬蟲,使myspider馬上開始運行,注意必須以post方式
schUrl = baseurl + 'schedule.json'
dictdata ={ "project":project,"spider":spider}
r= reqeusts.post(schUrl, json= dictdata)
print '5.1.delversion : [%s]\n\n'  %r.text 

#http://127.0.0.1:6800/delversion.json -d project=myproject -d version=r99'
#刪除scrapyd服務器上myproject的工程下的版本名爲version的爬蟲,注意必須以post方式
delverUrl = baseurl + 'delversion.json'
dictdata={"project":project ,"version": version }
r= reqeusts.post(delverUrl, json= dictdata)
print '6.1.delversion : [%s]\n\n'  %r.text 

#http://127.0.0.1:6800/delproject.json -d project=myproject
#刪除scrapyd服務器上myproject工程,注意該命令會自動刪除該工程下全部的spider,注意必須以post方式
delProUrl = baseurl + 'delproject.json'
dictdata={"project":project  }
r= reqeusts.post(delverUrl, json= dictdata)
print '6.2.delproject : [%s]\n\n'  %r.text

總結一下:

一、獲取狀態

http://127.0.0.1:6800/daemonstatus.json

二、獲取項目列表
http://127.0.0.1:6800/listprojects.json

三、獲取項目下已發佈的爬蟲列表

http://127.0.0.1:6800/listspiders.json?project=myproject

四、獲取項目下已發佈的爬蟲版本列表

http://127.0.0.1:6800/listversions.json?project=myproject

五、獲取爬蟲運行狀態

http://127.0.0.1:6800/listjobs.json?project=myproject
 六、啓動服務器上某一爬蟲(必須是已發佈到服務器的爬蟲)
http://localhost:6800/schedule.json (post方式,data={"project":myproject,"spider":myspider})

七、刪除某一版本爬蟲

http://127.0.0.1:6800/delversion.json (post方式,data={"project":myproject,"version":myversion})

八、刪除某一工程,包括該工程下的各版本爬蟲

http://127.0.0.1:6800/delproject.json(post方式,data={"project":myproject})

 到此,基於scrapyd的爬蟲發佈教程就寫完了。

可能有人會說,我直接用scrapy cwal 命令也能夠執行爬蟲,我的理解用scrapyd服務器管理爬蟲,至少有如下幾個優點:

一、能夠避免爬蟲源碼被看到。

二、有版本控制。

三、能夠遠程啓動、中止、刪除,正是由於這一點,因此scrapyd也是分佈式爬蟲的解決方案之一。

相關文章
相關標籤/搜索