1. 程式人生 > >筆記-scrapy-scarpyd

筆記-scrapy-scarpyd

行操作 工具 不同的 ima spi center 主機 文檔 訪問

筆記-scrapy-scarpyd

1. scrapy部署

會寫爬蟲之後就是部署、管理爬蟲了,下面講一下如何部署scrapy爬蟲。

現在使用較多的管理工具是Scrapyd。

scrapyd是一個爬蟲管理服務器,在需要部署爬蟲的服務器上安裝。

2. scrapyd

2.1. 體系/原理

以向10臺服務器部署爬蟲為例,設A為操作端/發布端,則其余9臺為爬蟲運行端,操作端負責將爬蟲發布到運行端和遠程管理爬蟲的運行,停止,刪除。

運行端則接受操作端的命令,部署、運行爬蟲。

操作端需要scrapyd-client,運行端需要安裝scrapyd並處於運行狀態。

實際上面兩個部件以前是一體的,後來進行了分離。

下面先講scrapyd。

2.2. scrapyd安裝

pip install scrapyd

安裝版本為1.2.0

2.3. 使用

啟動scrapyd服務:
scrapyd # 啟動服務,端口號 6800

停止scrapyd的服務:
Control + C

圖形界面:

打開瀏覽器,192.168.xx.xx:6800,界面如下:

在這裏可以查看當前任務及日誌。

2.4. 配置及其它問題

  1. 本地瀏覽器訪問成功,遠程訪問不了。

默認bind綁定的ip地址是127.0.0.1端口是6800,這裏為了其他主機可以訪問,需將ip地址設置為0.0.0.0。

需要到配置文件中修改,找到site-packages/scrapyd/default_scrapyd.conf

將bind_address = 127.0.0.1修改為0.0.0.0

2.5. 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

接口命令總結:

1、獲取狀態

http://127.0.0.1:6800/daemonstatus.json

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

3、獲取項目下已發布的爬蟲列表

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

4、獲取項目下已發布的爬蟲版本列表

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

5、獲取爬蟲運行狀態

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

7、刪除某一版本爬蟲

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

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

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

3. scrapyd-client

scrapyd-client是一個負責發布爬蟲的包,需要安裝。

3.1. install

pip install scrapyd-client

3.2. 部署爬蟲

準備工作:

切換到需要部署的scrapy項目目錄下,在此進行設置和打開命令行進行部署

創建爬蟲項目之後,下面會有個配置文件scrapy.cfg,打開,配置如下。

# 1. scrapyd的配置名
[deploy:scrapy_Tencent] #scrapy_ +項目名

配置名默認為空,但強烈建議取一個。

# 2. 啟動scrapyd服務的遠程主機ip,localhost默認本機的
url = http://localhost:6800/
#url = http:192.168.xx.xxx:6800 # 服務器的IP

#- 3.項目名稱
project = Tencent

上面的配置可以寫很多份,發布到不同的scrapyd服務器上。

將scrapy項目部署到scrapyd上

# -p 執行項目名,將Tencent按指定的配置信息部署到scrapyd
scrapyd-deploy shu1 -p shuhuang

3.3. 爬蟲開始執行及管理

1.啟動項目下指定的爬蟲
curl http://localhost:6800/schedule.json -d project=shuhuang -d spider=book

{"status": "ok", "jobid": "2f240b1171bc11e7ae5aa45e60e36247", "node_name": "PowerMac.local"}

這時會在啟動scrapyd的界面下看到輸出。

2.停止項目下指定的爬蟲(啟動之後會給出jobid,停止爬蟲時需要這個值)

curl http://localhost:6800/cancel.json -d project=shuhuang job=2f240b1171bc11e7ae5aa45e60e36247

關於更多的命令參數參考前文。

4. 總結

scrapyd是一個爬蟲服務器,負責管理爬蟲,它開放一個HTTP服務用於接收命令並對爬蟲進行操作;

scrapyd-client用於連接發布爬蟲到

5. 附錄

5.1. curl

很多教程中都使用curl命令,它是什麽?

cURL是一個利用URL語法在命令行下工作的文件傳輸工具,1997年首次發行。它支持文件上傳和下載,所以是綜合傳輸工具。

cURL支持的通信協議有FTP、FTPS、HTTP、HTTPS、TFTP、SFTP、Gopher、SCP、Telnet、DICT、FILE、LDAP、LDAPS、IMAP、POP3、SMTP和RTSP。

在這裏使用時相當於請求構造,get,post;

可以查看scrapyd文檔api部分,每個接口下列出了請求方法

  • Supported Request Methods: POST

curl安裝方法:

centos 下yum install curl

筆記-scrapy-scarpyd