日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

scrapyd部署_第八章 第一节 scrapyd和scrapy-client

發(fā)布時間:2023/12/2 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 scrapyd部署_第八章 第一节 scrapyd和scrapy-client 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

如果覺得文章對您產生幫助的話, 歡迎關注Python開發(fā)之路(微信公眾號: python-developer), 及時獲取更多教程

假設有我們做了一個項目是抓取很多網站(每個網站對應一個爬蟲), 需要分別部署到不同的服務器上(單臺扛不住), scrapy官方也提供了一種部署工具scrapyd。

這個工具是用來將爬蟲的項目的egg文件上傳到服務器上, 然后通過接口調用來啟動爬蟲. 上傳egg可以手動上傳, 但是比較麻煩。

所以有另外一個工具scrapy-client提供的scrapyd-deploy工具來進行egg文件的生成以及上傳到scrapyd服務器

另外我們在創(chuàng)建scrapy項目的時候, 有一個scrapy.cfg, 這個文件其實是為scrapy-client使用的

# scrapy crawl命令等使用的配置文件路徑 [settings] default = ccidcom.settings[deploy] # 在使用scrapyd-deploy進行生成egg和上傳的時候會使用 url = http://127.0.0.1:6800/ project = ccidcom

基本的一個部署流程:

  • 在爬蟲目標服務器上運行scrapyd
  • 修改爬蟲項目的scrapy.cfg文件, 指定爬蟲目標服務器(scrapyd)服務器地址
  • 在爬蟲的項目服務器(不一定和爬蟲目標服務器是同一臺)上運行scrapyd-delopy來生成egg文件并且上傳到指定的服務器
  • 調用scrapyd服務器的url運行爬蟲
  • 一、安裝scrapyd和scrapyd-client

    pip install scrapyd pip install scrapyd-client==1.2.0a1

    scrapyd-client指定版本的原因是下載的默認版本是1.1.0, 缺少scrapyd-client命令, 會提示scrapyd-client command not found

    二、啟動scrapyd

    1. 配置文件

    scrapyd會自動搜索配置文件的路徑, 以下就是指定的路徑, scrapyd會按照順序搜索文件

    scrapyd無法通過命令行指定配置文件!!

    • /etc/scrapyd/scrapyd.conf (Unix)
    • c:scrapydscrapyd.conf (Windows)
    • /etc/scrapyd/conf.d/* (in alphabetical order, Unix)
    • scrapyd.conf
    • ~/.scrapyd.conf (users home directory)

    所以我們在項目目錄中創(chuàng)建一個scrapyd.conf.

    這個配置文件里是不需要加引號的!

    [scrapyd] # 服務監(jiān)聽端口 http_port=6800 # 服務監(jiān)聽ip, 默認是127.0.0.1 bind_address=0.0.0.0 # 啟動時的scrapy進程并發(fā)數, 如果沒有設置或者是0, 則是系統(tǒng)可用的cpu數量乘以`max_proc_per_cpu`的值, 默認是0 max_proc=0 # 每個cpu的scrapy進程并發(fā)數,默認是:4 max_proc_per_cpu=4 # 是否開啟調試模式, 默認是off, 如果開啟, 當調用`JSON API`發(fā)生錯誤時, 會返回詳細的錯誤信息 debug=off # scrapyd-deploy上傳的egg文件的保存路徑, 默認是scrapyd運行的當前目錄 eggs_dir=./eggs # scrapyd運行是的數據庫路徑, 包括爬蟲隊列信息 dbs_dir=./dbs # Scrapy運行時的日志保存路徑, 如果禁用則設置為空 logs_dir=./logs # Scrapy運行時產生的item的數據保存路徑, 因為一般都是導出或者保存到數據庫, 所以這個建議禁用, 默認是禁用狀態(tài) items_dir= # 每個爬蟲運行完成后的logs和items數據保存數量, 也就是假設同一個爬蟲運行到第六次, 則會刪除前5次爬蟲產生的數據, 這個配置項之前是`logs_to_keep` jobs_to_keep=5 # 保存在啟動器中的已完成的進程數量 finished_to_keep=100 # 輪訓隊列的秒數, 也就是多長時間檢查一下爬蟲隊列 poll_interval=5 # 啟動子進程的模塊 # runner= scrapyd.runner # scrapyd啟動的app應用文件 # application=scrapyd.app.application # scrapyd資源跟目錄 # webroot = scrapyd.website.Root # 節(jié)點的展示名稱, 默認是${socket.gethostname()} # node_name=# 以下是調用接口的url路徑和對應的scrapyd類, 熟悉源碼可以自己進行開發(fā) [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

    2. 啟動scrapyd

    scrapyd

    運行成功以后提示

    2019-12-24T16:49:54+0800 [-] Loading /private/var/www/test/.venv/lib/python3.6/site-packages/scrapyd/txapp.py... 2019-12-24T16:49:54+0800 [-] Scrapyd web console available at http://0.0.0.0:6800/ # 可用的請求地址 2019-12-24T16:49:54+0800 [-] Loaded. 2019-12-24T16:49:54+0800 [twisted.scripts._twistd_unix.UnixAppLogger#info] twistd 19.10.0 (/private/var/www/test/.venv/bin/python3.6 3.6.5) starting up. 2019-12-24T16:49:54+0800 [twisted.scripts._twistd_unix.UnixAppLogger#info] reactor class: twisted.internet.selectreactor.SelectReactor. 2019-12-24T16:49:54+0800 [-] Site starting on 6800 # 監(jiān)聽端口 2019-12-24T16:49:54+0800 [twisted.web.server.Site#info] Starting factory <twisted.web.server.Site object at 0x103a50cc0> 2019-12-24T16:49:54+0800 [Launcher] Scrapyd 1.2.1 started: max_proc=48, runner='scrapyd.runner' # 啟動runner

    2. 查看web界面

    在瀏覽器中輸入http://127.0.0.1:6800, 可以看到scrapyd服務器的web界面

    Jobs: 是所有調用過的爬蟲的任務列表

    Logs: 所有任務產生的日志

    三、scrapyd-deploy部署爬蟲

    scrapyd-deploy是在爬蟲項目里運行的, 也就是和scrapy.cfg文件同級的目錄

    1. 修改scrapy.cfg文件

    如果有多個爬蟲目標服務器, 可以增加[deploy:]區(qū)域

    [settings] default = ccidcom.settings[deploy:ccid] # 默認是[deploy], ccid這里指定的是目標服務器的名稱 url = http://127.0.0.1:6800/ # 目標服務器的url和端口 project = ccidcom # 項目名稱

    2. 生成egg文件并且上傳到scrapyd服務器

    scrapyd-deploy [目標服務器名稱] -p [項目名稱] scrapyd-deploy ccid -p ccidcom

    如果成功, 會返回以下信息

    Packing version 1577178235 Deploying to project "ccidcom" in http://127.0.0.1:6800/addversion.json Server response (200): {"node_name": "bogon", "status": "ok", "project": "ccidcom", "version": "1577178235", "spiders": 1}

    意思就是發(fā)布到指定的爬蟲目標服務器, 發(fā)布上去的spiders數量是1, status是狀態(tài),project是項目名

    同樣的, 在scrapyd服務器上也會輸出以下信息

    2019-12-24T17:03:56+0800 [twisted.python.log#info] "127.0.0.1" - - [24/Dec/2019:09:03:55 +0000] "POST /addversion.json HTTP/1.1" 200 100 "-" "Python-urllib/3.6"

    3. scrapyd-client的一些操作

    1. 列出當前的項目

    scrapyd-client projects scrapyd-client -t http://127.0.0.1:6800 projects

    -t: 指定scrapyd的地址

    2. 列出指定項目的爬蟲列表

    scrapyd-client spiders -p [項目名稱] scrapyd-client spiders -p ccidcom scrapyd-client -t http://127.0.0.1:6800 spiders -p ccidcom

    得到輸出

    ccidcom: # 項目名稱ccid # 爬蟲名

    3. 運行爬蟲

    scrapyd-client schedule -p [項目名] [爬蟲名] scrapyd-client schedule -p ccidcom ccid scrapyd-client -t http://127.0.0.1:6800 schedule -p ccidcom ccid

    可以看到任務的名稱

    ccidcom / ccid => 6cab8f8c262d11ea8935acde48001122

    這時我們查看scrapyd的web管理界面, 也可以看到所有的任務

    Pending: 是等待執(zhí)行的任務

    Running: 正在運行的任務

    Finished: 已經運行完成的任務

    4. scrapyd-deploy的其他用法

    1. 部署指定項目到所有的爬蟲目標服務器

    scrapyd-deploy -a -p <project>

    2. 指定項目的版本

    默認scrapyd-client使用當前時間戳作為版本號, 我們可以自己指定版本

    scrapyd-deploy <target> -p <project> --version <version>

    如果是使用Mercurial或者Git, 也可以直接使用git或者Mercurial的修訂版本號作為版本號

    # scrapy.cfg [deploy:target] ... version = HG

    3. 列出所有的可用的scrapyd服務器列表

    scrapyd-deploy -l

    四、scrapyd服務器的json API

    爬蟲的啟動, 暫停以及查看, 都是通過scrapyd提供的json api來實現(xiàn)的. 其實scrapyd-client的命令, 其實也是調用的scrapyd的json api

    1. 獲取服務器負載信息

    curl http://localhost:6800/daemonstatus.json {"status": "ok", "running": "0", # 正在運行中的爬蟲數量"pending": "0", # 等待運行的爬蟲數量"finished": "0", # 已完成的爬蟲數量"node_name": "node-name" # 服務器節(jié)點名稱 }

    2. 部署或更新服務器上的爬蟲

    scrapyd-deploy 部署使用的其實就是這個命令

    這個是post請求

    curl http://localhost:6800/addversion.json -F project=myproject -F version=r23 -F egg=@myproject.egg

    project: 項目名稱

    version: 版本號

    egg: 項目的egg文件

    {"status": "ok", "spiders": 3}

    3. 調用爬蟲

    post請求

    $ curl http://localhost:6800/schedule.json -d project=myproject -d spider=somespider -d setting=DOWNLOAD_DELAY=2 -d arg1=val1

    project: 項目名

    spider: 調用的爬蟲名

    setting:指定配置項, 多個可以使用A=1&B=2的方式

    arg1=vale1: 指定調用爬蟲時傳遞的參數

    返回值:

    jobid是任務的id

    {"status": "ok", "jobid": "6487ec79947edab326d6db28a2d86511e8247444"}

    4. 取消任務

    post請求, 如果任務是等待狀態(tài), 則直接刪除, 如果是運行中, 則直接停止爬蟲

    curl http://localhost:6800/cancel.json -d project=myproject -d job=6487ec79947edab326d6db28a2d86511e8247444

    project: 項目名

    job: 任務id

    5. 列出所有項目

    curl http://localhost:6800/listprojects.json{"status": "ok", "projects": ["myproject", "otherproject"]}

    6. 查看指定項目的版本

    按照版本號順序返回, 最后一個是最新的版本

    curl http://localhost:6800/listspiders.json?project=myproject

    project: 項目名

    {"status": "ok", "versions": ["r99", "r156"]}

    7. 列出指定項目的所有爬蟲

    curl http://localhost:6800/listspiders.json?project=myproject

    project: 項目名

    _version: 版本號

    {"status": "ok", "spiders": ["spider1", "spider2", "spider3"]}

    8. 列出所有任務

    curl http://localhost:6800/listjobs.json?project=myproject

    project: 項目名

    {"status": "ok","pending": [{"id": "78391cc0fcaf11e1b0090800272a6d06","spider": "spider1"}],"running": [{"id": "422e608f9f28cef127b3d5ef93fe9399","spider": "spider2","start_time": "2012-09-12 10:14:03.594664"}],"finished": [{"id": "2f16646cfcaf11e1b0090800272a6d06", # 任務id"spider": "spider3", # 爬蟲名"start_time": "2012-09-12 10:14:03.594664", # 開始時間"end_time": "2012-09-12 10:24:03.594664" # 結束時間}] }

    9. 刪除指定版本號

    post請求

    curl http://localhost:6800/delversion.json -d project=myproject -d version=r99

    project: 項目名

    version: 要刪除的版本號

    10. 刪除項目

    post請求

    curl http://localhost:6800/delproject.json -d project=myproject

    project: 項目名

    {"status": "ok"}

    五、其他問題

    1. 請求認證

    如果我們的服務是部署在公網上的話, 意外被人知道, 上傳爬蟲等, 可能有一定的安全風險。

    我們可以使用nginx做代理轉發(fā), 開啟nginx的basic auth

    然后修改scrapy.cfg文件

    [deploy:example] url = http://scrapyd.example.com/api/scrapyd username = scrapy password = secret

    指定username和password即可

    總結

    以上是生活随笔為你收集整理的scrapyd部署_第八章 第一节 scrapyd和scrapy-client的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。