[爬蟲]scrapyd--scrapydweb

scrapyd-實際的管理爬蟲程序

scrapyd 是由scrapy 官方提供的爬蟲管理工具,使用它我們可以非常方便地上傳、控制爬蟲並且查看運行日誌。

scrapyd是c/s架構

所有的爬蟲調度工作全部依靠接口實現,(https://scrapyd.readthedocs.io/en/latest/api.html)

不過有直接封裝好的模塊scrapydWeb,可視化的查看和管理爬蟲程序

 

scrapyd服務器:

安裝:pip install scrapyd

運行:‘scrapyd’命令即可啓動服務器,訪問接口地址:127.0.0.1:5000(可以自行在配置文件中更改)

scrapydweb對scrapyd運行爬蟲產生的日誌進行了分析整理,藉助了logparser模塊

scrapyd服務器配置:

更改配置文件default_scrapyd.conf(所在目錄C:\python\Lib\site-packages\scrapyd)

外網訪問:bind_address = 0.0.0.0

 

[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

scrapyd客戶端:

安裝:pip install scrapyd-client

部署scrapy 項目:

直接使用scrapyd-client提供的scrapyd-deploy工具

scrapy-client模塊中有一個scrapyd-deploy文件,因爲此文件只能在linux中打開,所以要自己寫一個windoes的bat文件

創建scrapyd-deploy.bat文件並寫入以下代碼:

@echo off
"C:\Program Files\python_virtual\spider\Scripts\python.exe" "C:\Program Files\python_virtual\spider\Scripts\scrapyd-deploy" %1 %2 %3 %4 %5 %6 %7 %8 %9

 

修改要部署項目的根目錄中的 scrapy.cfg 文件

# 設置部署名稱

[deploy: spider_lianjia]
# scrapyd服務器地址,如果scrapyd沒有爬蟲項目本地,通過這裏指定scrapyd的遠程地址
url = http://localhost:6800/
# 項目名稱
project = lianjia

# 須要注意的是這裏的用戶密碼並不表示訪問該項目須要驗證,而是登錄服務器用的;沒有可以不用寫
# username = enlong
# password = test
 

scrapyd-deploy –l 查看當前部署的爬蟲項目

 

發佈本地項目到遠程scrapyd服務器

scrapyd-deploy <host> -p <project>

host是部署scrapy的服務器,project是你的項目名稱

如:

scrapyd-deploy spider_lianjia –p lianjia

發佈成功後

image

原理:

在本地執行部署命令後,會在服務器的python目錄(自動放到了安裝scrapyd的python環境-site-packages)下產生兩個文件eggs/dbs:其中eggs是爬蟲文件的打包;運行後還會有logs文件,用來存放運行日誌

不會打包需要的依賴模塊,需要手動在服務器上安裝

linux下:

../site-packages/scrapyd/eggs/zhilian/1574780063.egg

../site-packages/scrapyd/dbs/zhilian.db

 

windows下:

除非在配置文件中指明egg/dbs/logs目錄,否則在執行scrapyd命令的當前目錄下創建這幾個文件夾

部署參考:https://blog.csdn.net/baoshuowl/article/details/79656701

 

不需要在服務器上對egg包做操作,直接通過scrapyd提供的接口來啓動管理爬蟲

scrapyd默認端口6800

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

可以對接口進行封裝:

import requests

ip = "194.168.1.126"
project = "zhilian"
class Deploy:
# 獲取狀態
def status(self):
url = "http://{}:6800/daemonstatus.json".format(ip)
resp = requests.get(url)
print("爬蟲狀態")
print(resp.content.decode())

# 獲取項目列表
def project_list(self):
url = "http://{}:6800/listprojects.json".format(ip)
resp = requests.get(url)
print("所有爬蟲項目")
print(resp.content.decode())

# 獲取項目下已發佈的爬蟲版本列表
def project_version(self):
url = "http://{}:6800/listversions.json?project={}".format(ip,project)
resp = requests.get(url)
print("某個爬蟲項目的所有版本")
print(resp.content.decode())

# 獲取爬蟲運行狀態
def spider_status(self):
url = "http://{}:6800/listjobs.json?project={}".format(ip,project)
resp = requests.get(url)
print("所有爬蟲狀態")
print(resp.content.decode())

# 啓動服務器上某一爬蟲
def start(self):
url = "http://{}:6800/schedule.json".format(ip)
data = {
"project": "zhilian",
"spider": "zhaopin"
}
resp = requests.post(url, data=data)
print("開啓某個爬蟲項目")
print(resp.content.decode())

def stop(self):
url = "http://{}:6800/cancel.json".format(ip)
# 每次啓動都會有一個新的job的id
data = {
"project": "zhilian",
"job": "f55dbb54106411eab1e9dca6322820ac"
}
resp = requests.post(url, data=data)
print("停止某個爬蟲項目")
print(resp.content.decode())

# 刪除某一版本爬蟲,["1574780063", "1574781404"],最新的在列表最後面
def delete(self,version):
url = "http://{}:6800/delversion.json".format(ip)
data = {
"project": "zhilian",
"version": version
}
resp = requests.post(url, data=data)
print("刪除某個爬蟲項目的某個版本")
print(resp.content.decode())

def run(self):
self.status()
self.project_list()
self.project_version()
# self.spider_status()
# self.delete("1574781501")
self.start()
# self.stop()
self.spider_status()


if __name__ == '__main__':
dep = Deploy()
dep.run()

api參考官方:https://scrapyd.readthedocs.io/en/stable/api.html

 

scrapydWeb


特點:

Scrapyd 集羣管理,可以配置管理多個scrapyd服務器

Scrapy 日誌分析,爬蟲實時進度可視化,統計信息展示

支持所有 Scrapyd API,不需要再手動的調用接口來管理和查看爬蟲狀態

狀態監控的本質:向scrapyd請求日誌,然後分析,運行scrapydweb的機器必須安裝logparser模塊;管理是通過調用scrapyd提供的api實現的

過程:開啓/關閉爬蟲,向scrapydweb發生請求,scrapydweb向scrapyd發送請求;scrapydweb不斷的向scrapyd請求日誌,然後用logparser解析日誌,最終做展示。

 

scrapydweb配置:第一次運行scrapydweb命令,將在當前工作目錄生成配置文件 "scrapydweb_settings.py"並使用,可用於自定義 Scrapyd 服務器列表等選項;scrapydweb依賴於配置文件,所以要在自定義的配置目錄下運行scrapydweb命令

配置如下:

############################## 快速設置 開始 ###################################
# 配置本地訪問scrapyweb的ip和端口,端口默認5000
SCRAPYDWEB_BIND = '127.0.0.1'   # 如果是在遠程機器上,寫遠程地址
SCRAPYDWEB_PORT = 6000

# 是否開啓訪問認證限制
ENABLE_AUTH = True
USERNAME = 'root'
PASSWORD = '123456'


# ------------------------------ Chinese --------------------------------------
# 請先確保所有遠程服務器已經安裝和啓動了scrapyd
# 如需遠程訪問 Scrapyd,需在 Scrapyd 配置文件中設置 'bind_address = 0.0.0.0',然後重啓 Scrapyd

# 配置需要遠程訪問的scrapyd服務器地址,如果有多個服務器,添加各自的ip
# 如果遠程服務器需要登錄,則需配置用戶名/密碼
SCRAPYD_SERVERS = [
'127.0.0.1:6800',
# 'username:password@localhost:6801#group',
# ('username', 'password', 'localhost', '6801', 'group'),
]

# ------------------------------ Chinese --------------------------------------
# 假如 ScrapydWeb 和某個 Scrapyd 運行於同一臺主機,建議更新如下三個設置項。
# ENABLE_LOGPARSER:The default is False, set it to True to automatically run LogParser as a subprocess at startup

LOCAL_SCRAPYD_SERVER = '127.0.0.1:6800'
# 配置爬蟲日誌目錄
LOCAL_SCRAPYD_LOGS_DIR = r'D:\python\code\spider_review\lianjia\logs'
# 是否解析日誌,需要先安裝:pip install logparser,通過命令 logparser 啓動 LogParser
ENABLE_LOGPARSER = True


############################## Scrapyd ########################################
# 解析的log文件類型
SCRAPYD_LOG_EXTENSIONS = ['.log', '.log.gz', '.txt']

############################## LogParser ######################################
# 是否備份訪問過的所留下的本地日誌,這樣如果遠程日誌被刪除,本地也可以依然使用
BACKUP_STATS_JSON_FILE = True


# 其他的配置默認即可

logparser可以將原來雜亂的日誌做整理,進行顯示

參看:https://segmentfault.com/a/1190000018006652?utm_source=tag-newest

 

 

分佈式爬蟲部署

每個服務器上都要安裝scrapyd

將本地開發的爬蟲分別部署到各個服務器上

通過scrapydweb配置,監控管理每個爬蟲的運行狀態

 

最終需要開啓的服務,scrapyd,scrapydweb

 

其他:

需要用到scrapy的item,scrapydweb的item界面纔會有日誌展示

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章