從零開始學python(十六)爬蟲集群部署

前言

今天講述Python框架源碼專題最后一個部分,爬蟲集群部署,前面更新了十五個從零開始學python的系列文章,分別是
1.編程語法必修篇
2.網(wǎng)絡編程篇
3.多線程/多進程/協(xié)程篇
4.MySQL數(shù)據(jù)庫篇
5.Redis數(shù)據(jù)庫篇
6.MongoDB數(shù)據(jù)庫篇
7.機器學習篇
8.全棧開發(fā)篇
9.Numpy/pandas/matplotlib篇
10.Hadoop篇
11.Spark篇
12.爬蟲工程師篇
13.爬蟲工程師自動化和抓包篇
14.scrapy框架篇
15.feapder框架篇

本系列文根據(jù)以下學習路線展開講述:

從零開始學python到高級進階路線圖主頁

爬蟲集群部署

一丶scrapyd框架

1.環(huán)境部署

Scrapyd是一個基于Twisted的Python框架,用于部署和運行Scrapy爬蟲。它提供了一個Web服務,可以通過API來管理Scrapy爬蟲的部署和運行。在Scrapyd中,爬蟲可以被打包成一個egg文件,然后通過API上傳到Scrapyd服務器上進行部署和運行。

以下是Scrapyd框架環(huán)境部署的詳細步驟:

安裝Python和pip

Scrapyd是基于Python的框架,因此需要先安裝Python和pip??梢詮腜ython官網(wǎng)下載Python安裝包,然后使用命令行安裝pip。

安裝Scrapy和Scrapyd

使用pip安裝Scrapy和Scrapyd:

pip install scrapy
pip install scrapyd

配置Scrapyd

Scrapyd的配置文件位于/etc/scrapyd/scrapyd.conf??梢允褂靡韵旅顏砭庉嬇渲梦募?/p>

sudo nano /etc/scrapyd/scrapyd.conf

在配置文件中,可以設置Scrapyd的端口號、日志文件路徑、爬蟲項目路徑等。

啟動Scrapyd

使用以下命令啟動Scrapyd:

scrapyd

Scrapyd將會在默認端口6800上啟動??梢栽跒g覽器中訪問http://localhost:6800/來查看Scrapyd的Web界面。

部署Scrapy爬蟲

將Scrapy爬蟲打包成一個egg文件,然后使用以下命令將其部署到Scrapyd服務器上:

curl -F project=myproject -F spider=myspider \
    -F eggfile=@myproject.egg \
    http://localhost:6800/schedule.json -o result.json

其中,project和spider參數(shù)分別指定爬蟲所在的項目和爬蟲名稱,eggfile參數(shù)指定要上傳的egg文件路徑,最后的URL是Scrapyd的API地址。

查看爬蟲運行狀態(tài)

可以在Scrapyd的Web界面上查看爬蟲的運行狀態(tài)。也可以使用以下命令來查看爬蟲的運行日志:

curl http://localhost:6800/logs/myproject/myspider/001

其中,myproject和myspider分別是爬蟲所在的項目和爬蟲名稱,001是爬蟲運行的任務ID。

以上就是Scrapyd框架環(huán)境部署的詳細步驟。

2.scrapyd API處理爬蟲

Scrapyd是一個用于部署和運行Scrapy爬蟲的Python框架,它提供了一個基于HTTP的API,可以通過API管理和控制爬蟲的運行。通過Scrapyd API,你可以與Scrapyd服務器進行通信,發(fā)送指令來管理爬蟲的啟動、停止、查看爬蟲狀態(tài)等操作。

下面是對Scrapyd API處理爬蟲的詳細解釋:

安裝Scrapyd

首先,需要安裝Scrapyd框架。可以使用pip命令進行安裝:pip install scrapyd

啟動Scrapyd服務器

使用命令scrapyd啟動Scrapyd服務器。默認情況下,Scrapyd服務器將在6800端口上運行。

創(chuàng)建Scrapy爬蟲

在使用Scrapyd API之前,需要先創(chuàng)建一個Scrapy爬蟲。可以使用Scrapy命令行工具創(chuàng)建一個新的爬蟲項目,并編寫爬蟲代碼。

部署爬蟲

在項目根目錄下運行命令scrapyd-deploy,將爬蟲部署到Scrapyd服務器上。這將會生成一個scrapy.cfg配置文件,并將項目上傳到Scrapyd服務器。

使用Scrapyd API

Scrapyd API提供了一系列接口用于管理爬蟲,包括啟動爬蟲、停止爬蟲、獲取爬蟲狀態(tài)等。

解析API響應

Scrapyd API的響應是JSON格式的數(shù)據(jù)??梢允褂肞ython的requests庫或其他HTTP請求庫來發(fā)送API請求,并解析返回的JSON數(shù)據(jù)。

通過Scrapyd API,你可以通過程序化的方式管理和控制Scrapy爬蟲的運行。這使得你可以方便地遠程啟動和監(jiān)控爬蟲任務。

3.scrapyd多任務管理

在Scrapyd中,多任務管理是指同時運行和管理多個Scrapy爬蟲任務的能力。Scrapyd提供了一組API和工具,可以輕松地管理多個爬蟲任務,包括啟動、停止、監(jiān)視任務狀態(tài)以及獲取任務結果等。下面是對Scrapyd多任務管理的詳細解釋:

創(chuàng)建多個爬蟲項目

首先,你需要創(chuàng)建多個獨立的Scrapy爬蟲項目。每個項目都在獨立的目錄中,并具有自己的爬蟲代碼、配置文件和依賴項。

部署爬蟲項目

使用Scrapyd的部署工具(如scrapyd-deploy命令)將各個爬蟲項目部署到Scrapyd服務器上。確保你為每個項目指定唯一的項目名稱。

啟動多個任務

使用Scrapyd API的/schedule.json接口來啟動多個任務。你可以通過發(fā)送多個HTTP請求,每個請求對應一個任務,來實現(xiàn)同時啟動多個任務。在每個請求中,指定項目名稱和要啟動的爬蟲名稱。

監(jiān)視任務狀態(tài)

使用Scrapyd API的/listjobs.json接口來獲取當前運行中的任務列表及其狀態(tài)。你可以周期性地發(fā)送API請求以獲取最新的任務狀態(tài)信息。根據(jù)任務狀態(tài),可以判斷任務是正在運行、已完成還是出現(xiàn)錯誤。

獲取任務結果

當任務完成后,可以使用Scrapyd API的/listjobs.json接口或/jobq/{job_id}/items.json接口來獲取任務的結果數(shù)據(jù)。這些接口將返回爬蟲任務的輸出數(shù)據(jù),如爬取的數(shù)據(jù)項或日志信息。

停止任務

如果需要停止正在運行的任務,可以使用Scrapyd API的/cancel.json接口。提供項目名稱和任務ID,即可停止相應的任務。

通過Scrapyd的多任務管理能力,你可以同時運行和管理多個獨立的爬蟲任務。這使得你可以處理大規(guī)模的爬取任務,提高效率并降低管理成本。

二丶gerapy部署爬蟲

1.gerapy環(huán)境搭建

Gerapy是一個基于Scrapy的分布式爬蟲管理框架,可以方便地管理多個Scrapy爬蟲,并提供了Web界面進行可視化操作。下面是Gerapy環(huán)境搭建的詳細講解:

安裝Python

Gerapy是基于Python開發(fā)的,因此需要先安裝Python??梢詮墓倬W(wǎng)下載Python安裝包,也可以使用包管理工具進行安裝。

安裝Scrapy

Gerapy是基于Scrapy的,因此需要先安裝Scrapy??梢允褂胮ip進行安裝:

pip install scrapy

安裝Gerapy

可以使用pip進行安裝:

pip install gerapy

安裝Redis

Gerapy使用Redis作為分布式任務隊列和數(shù)據(jù)存儲,因此需要先安裝Redis。可以從官網(wǎng)下載Redis安裝包,也可以使用包管理工具進行安裝。

配置Gerapy
Gerapy的配置文件位于~/.gerapy/config.json,可以使用以下命令進行初始化:

gerapy init

然后編輯~/.gerapy/config.json文件,配置Redis和Gerapy的用戶名和密碼等信息。

啟動Gerapy
可以使用以下命令啟動Gerapy:

gerapy

然后在瀏覽器中訪問http://localhost:8000,輸入用戶名和密碼登錄Gerapy的Web界面。

創(chuàng)建Scrapy項目

在Gerapy的Web界面中,可以創(chuàng)建Scrapy項目,并在項目中創(chuàng)建爬蟲。Gerapy會自動將爬蟲添加到任務隊列中,可以在Web界面中查看任務狀態(tài)和日志。

2.gerapy服務器部署

安裝Python和Scrapy

在服務器上安裝Python和Scrapy,可以使用以下命令:

sudo apt-get update
sudo apt-get install python3 python3-pip
sudo pip3 install scrapy

安裝Gerapy

使用以下命令安裝Gerapy:

sudo pip3 install gerapy

初始化Gerapy

使用以下命令初始化Gerapy:

gerapy init

這將創(chuàng)建一個名為gerapy的文件夾,其中包含Gerapy的配置文件和其他必要文件。

配置Gerapy

在gerapy文件夾中,打開config.py文件,配置Gerapy的相關參數(shù),例如數(shù)據(jù)庫連接信息、管理員賬號等。

啟動Gerapy

使用以下命令啟動Gerapy:

gerapy runserver

這將啟動Gerapy的Web界面,可以在瀏覽器中訪問http://localhost:8000來管理爬蟲。

部署爬蟲

在Gerapy的Web界面中,可以添加、編輯和刪除爬蟲,并且可以在多臺服務器上部署爬蟲,實現(xiàn)分布式爬取。

3.gerapy打包框架項目

Gerapy是一個基于Scrapy的分布式爬蟲管理框架,可以方便地管理多個Scrapy爬蟲,并提供了Web界面進行操作和監(jiān)控。在實際項目中,我們可能需要將Gerapy打包成可執(zhí)行文件,以便在其他機器上部署和運行。本文將介紹如何打包Gerapy框架項目。

安裝pyinstaller

pyinstaller是一個用于將Python代碼打包成可執(zhí)行文件的工具,可以通過pip進行安裝:

pip install pyinstaller

打包Gerapy

在Gerapy項目根目錄下執(zhí)行以下命令:

pyinstaller -F gerapy.spec

其中,gerapy.spec是一個配置文件,用于指定打包的參數(shù)和選項。如果沒有該文件,可以通過以下命令生成:

pyinstaller --name=gerapy -y --clean --windowed --icon=gerapy.ico --add-data=gerapy.ico;. gerapy/__main__.py

該命令將生成一個名為gerapy的可執(zhí)行文件,使用了以下參數(shù)和選項:

  • --name:指定生成的可執(zhí)行文件名為gerapy;
  • -y:自動覆蓋已存在的輸出目錄;
  • --clean:在打包前清理輸出目錄;
  • --windowed:生成窗口應用程序,不顯示命令行窗口;
  • --icon:指定應用程序圖標;
  • --add-data:將gerapy.ico文件打包到可執(zhí)行文件中。

運行Gerapy

打包完成后,在dist目錄下會生成一個名為gerapy的可執(zhí)行文件。將該文件復制到其他機器上,即可在該機器上運行Gerapy框架項目。

三丶feapder部署

1.feapder應用場景和原理

Feapder是一個基于Python開發(fā)的輕量級分布式爬蟲框架,旨在提供簡單、易用且高效的爬蟲解決方案。它具有以下應用場景和原理:

應用場景:
  • 數(shù)據(jù)采集:Feapder可以用于從各種網(wǎng)站和數(shù)據(jù)源中采集數(shù)據(jù)。無論是爬取結構化數(shù)據(jù)還是非結構化數(shù)據(jù),F(xiàn)eapder都提供了豐富的功能和靈活的配置選項來滿足不同數(shù)據(jù)采集的需求。

  • 網(wǎng)站監(jiān)測:Feapder可以周期性地監(jiān)測網(wǎng)站內(nèi)容的變化,并及時提醒用戶。這在需要實時監(jiān)控目標網(wǎng)站的情況下非常有用,比如新聞更新、價格變動等。

  • 數(shù)據(jù)清洗和處理:Feapder支持自定義處理函數(shù)和管道來對爬取的數(shù)據(jù)進行清洗和處理。你可以使用Feapder提供的數(shù)據(jù)處理功能,比如去重、編碼轉換、數(shù)據(jù)過濾等,將爬取的原始數(shù)據(jù)轉化為可用的結構化數(shù)據(jù)。

  • 數(shù)據(jù)存儲和導出:Feapder提供了多種數(shù)據(jù)存儲選項,包括數(shù)據(jù)庫存儲、文件存儲和消息隊列等。你可以根據(jù)需求選擇適合的存儲方式,并支持數(shù)據(jù)導出到各種格式,如CSV、JSON等。

原理解析:

Feapder的核心原理是基于分布式的異步任務調(diào)度和處理。以下是Feapder的原理解析:

  • 分布式架構:Feapder使用分布式架構來提高爬取效率和可擴展性。任務調(diào)度和數(shù)據(jù)處理分布在多個節(jié)點上,每個節(jié)點可以獨立運行爬蟲任務,并通過消息隊列進行通信和數(shù)據(jù)傳輸。

  • 異步任務調(diào)度:Feapder使用異步任務調(diào)度框架(比如Celery)來實現(xiàn)任務的并發(fā)執(zhí)行。每個爬蟲任務都被封裝為一個可執(zhí)行的異步任務,可以獨立運行在任務調(diào)度器中,并通過消息隊列接收和發(fā)送任務相關的消息。

  • 任務調(diào)度和監(jiān)控:Feapder提供了任務調(diào)度和監(jiān)控的功能,可以實時監(jiān)控任務的狀態(tài)、進度和錯誤信息。你可以通過Feapder的管理界面或API,對任務進行啟動、停止、暫停和重新調(diào)度等操作,以及實時查看任務的日志和統(tǒng)計信息。

  • 數(shù)據(jù)處理和存儲:Feapder支持自定義的數(shù)據(jù)處理函數(shù)和處理管道,可以對爬取的數(shù)據(jù)進行清洗、轉換和處理。同時,F(xiàn)eapder提供了多種數(shù)據(jù)存儲選項,可以將處理后的數(shù)據(jù)存儲到數(shù)據(jù)庫、文件系統(tǒng)或消息隊列中,并支持數(shù)據(jù)導出和導入。

總結來說,F(xiàn)eapder通過分布式異步任務調(diào)度和處理的方式,實現(xiàn)了高效、靈活和可擴展的爬蟲框架。它的設計使得用戶可以簡單地配置和管理爬蟲任務,并方便地進行數(shù)據(jù)處理和存儲。無論是小規(guī)模的數(shù)據(jù)采集還是大規(guī)模的分布式爬蟲任務,F(xiàn)eapder都是一個強大的選擇。

2.feapder鏡像拉取

feapder是一個基于Python的分布式爬蟲框架,它可以幫助用戶快速構建高效、穩(wěn)定的爬蟲系統(tǒng)。在使用feapder之前,需要先拉取feapder的鏡像。

鏡像拉取命令如下

docker pull feapder/feapder

這個命令會從Docker Hub上拉取feapder的最新版本鏡像。拉取完成后,可以使用以下命令查看已經(jīng)拉取的鏡像:

docker images

feapder的鏡像包含了所有需要的依賴和配置,可以直接使用。在使用feapder時,可以通過Docker運行feapder鏡像,也可以將鏡像部署到Kubernetes集群中。

使用Docker運行feapder鏡像的命令如下:

docker run -it --name feapder feapder/feapder

這個命令會在Docker容器中啟動feapder,并進入容器的交互式終端。在容器中可以使用feapder提供的命令行工具來創(chuàng)建、管理爬蟲任務。

總之,feapder的鏡像拉取非常簡單,只需要執(zhí)行一條命令即可。同時,feapder的鏡像也非常方便使用,可以直接在Docker容器中運行,也可以部署到Kubernetes集群中。

3.docker部署feapder部署環(huán)境

feapder是一個基于Python的分布式爬蟲框架,可以用于快速開發(fā)各種類型的爬蟲。在使用feapder時,可以選擇使用docker進行部署,以便更方便地管理和部署爬蟲。

以下是使用docker部署feapder的詳細步驟:

安裝docker和docker-compose

在開始之前,需要先安裝docker和docker-compose??梢詤⒖脊俜轿臋n進行安裝。

拉取feapder鏡像

可以使用以下命令從Docker Hub上拉取feapder鏡像:

docker pull feapder/feapder

創(chuàng)建docker-compose.yml文件

在本地創(chuàng)建一個docker-compose.yml文件,用于定義feapder的容器和相關配置。以下是一個示例文件:

version: '3'

services:
  redis:
    image: redis:latest
    ports:
      - "6379:6379"
    volumes:
      - ./redis-data:/data

  mysql:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: feapder
    ports:
      - "3306:3306"
    volumes:
      - ./mysql-data:/var/lib/mysql

  feapder:
    image: feapder/feapder
    environment:
      - REDIS_HOST=redis
      - MYSQL_HOST=mysql
      - MYSQL_USER=root
      - MYSQL_PASSWORD=root
      - MYSQL_DATABASE=feapder
    volumes:
      - ./feapder-data:/app/data
    depends_on:
      - redis
      - mysql

在這個文件中,定義了三個服務:redis、mysql和feapder。其中,redis和mysql分別用于存儲爬蟲的任務隊列和數(shù)據(jù),feapder則是爬蟲的運行環(huán)境。

啟動容器

在本地的項目目錄下,運行以下命令啟動容器:

docker-compose up -d
這個命令會啟動所有定義在docker-compose.yml文件中的服務,并在后臺運行。

進入feapder容器

可以使用以下命令進入feapder容器:

docker exec -it feapder_feapder_1 /bin/bash

其中,feapder_feapder_1是容器的名稱,可以使用docker ps命令查看。

運行爬蟲

在feapder容器中,可以使用feapder命令來運行爬蟲。例如,可以使用以下命令運行一個簡單的爬蟲:

feapder run spider demo

這個命令會運行名為demo的爬蟲。

以上就是使用docker部署feapder的詳細步驟。通過使用docker,可以更方便地管理和部署feapder爬蟲。

4.feapder部署scrapy項目

Feapder是基于Scrapy框架開發(fā)的分布式爬蟲框架,因此部署Feapder項目也需要先部署Scrapy項目。下面是部署Scrapy項目的詳細步驟:

1. 創(chuàng)建Scrapy項目

使用Scrapy命令行工具創(chuàng)建一個新的Scrapy項目,例如:

scrapy startproject myproject

2. 編寫Spider

在Scrapy項目中,Spider是爬蟲的核心部分,負責定義如何抓取網(wǎng)站的數(shù)據(jù)。在Scrapy項目中,Spider通常是一個Python類,需要繼承Scrapy提供的Spider類,并實現(xiàn)一些必要的方法。

例如,下面是一個簡單的Spider示例:

import scrapy

class MySpider(scrapy.Spider):
    name = 'myspider'
    start_urls = ['http://www.example.com']

    def parse(self, response):
        # 解析網(wǎng)頁內(nèi)容
        pass

3. 配置Scrapy項目

Scrapy項目的配置文件是settings.py,其中包含了一些Scrapy的配置選項,例如爬蟲的User-Agent、下載延遲等等。在配置文件中,還可以設置Scrapy使用的中間件、管道等等。

例如,下面是一個簡單的配置文件示例:

BOT_NAME = 'myproject'

SPIDER_MODULES = ['myproject.spiders']
NEWSPIDER_MODULE = 'myproject.spiders'

USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'

DOWNLOAD_DELAY = 3

ITEM_PIPELINES = {
    'myproject.pipelines.MyPipeline': 300,
}

4. 運行Spider

使用Scrapy命令行工具運行Spider,例如:

scrapy crawl myspider

以上就是部署Scrapy項目的詳細步驟。在部署Feapder項目時,可以將Scrapy項目作為Feapder的一個子項目,然后在Feapder中調(diào)用Scrapy項目的Spider來完成具體的爬取任務。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容