前言
今天講述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ù)以下學習路線展開講述:
爬蟲集群部署
一丶scrapyd框架
1.環(huán)境部署
Scrapyd是一個基于Twisted的Python框架皆刺,用于部署和運行Scrapy爬蟲凌摄。它提供了一個Web服務羡蛾,可以通過API來管理Scrapy爬蟲的部署和運行。在Scrapyd中望伦,爬蟲可以被打包成一個egg文件煎殷,然后通過API上傳到Scrapyd服務器上進行部署和運行。
以下是Scrapyd框架環(huán)境部署的詳細步驟:
安裝Python和pip
Scrapyd是基于Python的框架劣摇,因此需要先安裝Python和pip弓乙。可以從Python官網(wǎng)下載Python安裝包暇韧,然后使用命令行安裝pip。
安裝Scrapy和Scrapyd
使用pip安裝Scrapy和Scrapyd:
pip install scrapy
pip install scrapyd
配置Scrapyd
Scrapyd的配置文件位于/etc/scrapyd/scrapyd.conf懈玻。可以使用以下命令來編輯配置文件:
sudo nano /etc/scrapyd/scrapyd.conf
在配置文件中艺栈,可以設置Scrapyd的端口號、日志文件路徑诅妹、爬蟲項目路徑等毅人。
啟動Scrapyd
使用以下命令啟動Scrapyd:
scrapyd
Scrapyd將會在默認端口6800上啟動⊙咚可以在瀏覽器中訪問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)等。
啟動爬蟲:使用/schedule.json接口來啟動一個爬蟲戚嗅。需要提供爬蟲名稱和可選的參數(shù)枢舶。例如:http://localhost:6800/schedule.json -d project=myproject -d spider=myspider
停止爬蟲:使用/cancel.json接口可以停止正在運行的爬蟲。需要提供爬蟲任務的ID躏尉。例如:http://localhost:6800/cancel.json -d project=myproject -d job=12345
查看爬蟲狀態(tài):使用/listjobs.json接口可以獲取當前運行中的爬蟲任務列表及其狀態(tài)后众。例如:http://localhost:6800/listjobs.json?project=myproject
解析API響應:
Scrapyd API的響應是JSON格式的數(shù)據(jù)×欧祝可以使用Python的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ǎng)下載Python安裝包,也可以使用包管理工具進行安裝刮吧。
安裝Scrapy
Gerapy是基于Scrapy的掖蛤,因此需要先安裝Scrapy≈录ィ可以使用pip進行安裝:
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跑杭。可以參考官方文檔進行安裝爹橱。
拉取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來完成具體的爬取任務丽柿。