scrapy+scrapyd+gerapy?爬蟲(chóng)調(diào)度框架超詳細(xì)教程
一、scrapy
1.1 概述
Scrapy,Python開(kāi)發(fā)的一個(gè)快速、高層次的屏幕抓取和web抓取框架,用于抓取web站點(diǎn)并從頁(yè)面中提取結(jié)構(gòu)化的數(shù)據(jù)。Scrapy用途廣泛,可以用于數(shù)據(jù)挖掘、監(jiān)測(cè)和自動(dòng)化測(cè)試.
其最初是為了頁(yè)面抓取 (更確切來(lái)說(shuō), 網(wǎng)絡(luò)抓取 )所設(shè)計(jì)的, 后臺(tái)也應(yīng)用在獲取API所返回的數(shù)據(jù)(例如 Amazon Associates Web Services ) 或者通用的網(wǎng)絡(luò)爬蟲(chóng).
Scrapy吸引人的地方在于它是一個(gè)框架,任何人都可以根據(jù)需求方便的修改。它也提供了多種類型爬蟲(chóng)的基類,如BaseSpider、sitemap爬蟲(chóng)等,最新版本又提供了web2.0爬蟲(chóng)的支持.
1.2 構(gòu)成
Scrapy框架主要由五大組件組成,它們分別是調(diào)度器(Scheduler)、下載器(Downloader)、爬蟲(chóng)(Spider)和實(shí)體管道(Item Pipeline)、Scrapy引擎(Scrapy Engine)。下面我們分別介紹各個(gè)組件的作用。
(1)、調(diào)度器(Scheduler):
調(diào)度器,說(shuō)白了把它假設(shè)成為一個(gè)URL(抓取網(wǎng)頁(yè)的網(wǎng)址或者說(shuō)是鏈接)的優(yōu)先隊(duì)列,由它來(lái)決定下一個(gè)要抓取的網(wǎng)址是 什么,同時(shí)去除重復(fù)的網(wǎng)址(不做無(wú)用功)。用戶可以自己的需求定制調(diào)度器。
(2)、下載器(Downloader):
下載器,是所有組件中負(fù)擔(dān)最大的,它用于高速地下載網(wǎng)絡(luò)上的資源。Scrapy的下載器代碼不會(huì)太復(fù)雜,但效率高,主要的原因是Scrapy下載器是建立在twisted這個(gè)高效的異步模型上的(其實(shí)整個(gè)框架都在建立在這個(gè)模型上的)。
(3)、 爬蟲(chóng)(Spider):
爬蟲(chóng),是用戶最關(guān)心的部份。用戶定制自己的爬蟲(chóng)(通過(guò)定制正則表達(dá)式等語(yǔ)法),用于從特定的網(wǎng)頁(yè)中提取自己需要的信息,即所謂的實(shí)體(Item)。 用戶也可以從中提取出鏈接,讓Scrapy繼續(xù)抓取下一個(gè)頁(yè)面。
(4)、 實(shí)體管道(Item Pipeline):
實(shí)體管道,用于處理爬蟲(chóng)(spider)提取的實(shí)體。主要的功能是持久化實(shí)體、驗(yàn)證實(shí)體的有效性、清除不需要的信息。
(5)、Scrapy引擎(Scrapy Engine):
Scrapy引擎是整個(gè)框架的核心.它用來(lái)控制調(diào)試器、下載器、爬蟲(chóng)。實(shí)際上,引擎相當(dāng)于計(jì)算機(jī)的CPU,它控制著整個(gè)流程。
1.3 安裝和使用
安裝
pip install scrapy(或pip3 install scrapy)
使用
創(chuàng)建新項(xiàng)目:scrapy startproject 項(xiàng)目名
創(chuàng)建新爬蟲(chóng):scrapy genspider 爬蟲(chóng)名 域名
啟動(dòng)爬蟲(chóng): scrapy crawl 爬蟲(chóng)名
二、scrapyd
2.1 簡(jiǎn)介
scrapyd是一個(gè)用于部署和運(yùn)行scrapy爬蟲(chóng)的程序,它允許你通過(guò)JSON API來(lái)部署爬蟲(chóng)項(xiàng)目和控制爬蟲(chóng)運(yùn)行,scrapyd是一個(gè)守護(hù)進(jìn)程,監(jiān)聽(tīng)爬蟲(chóng)的運(yùn)行和請(qǐng)求,然后啟動(dòng)進(jìn)程來(lái)執(zhí)行它們
2.2 安裝和使用
安裝
pip install scrapyd(或pip3 install scrapyd) pip install scrapyd-client(或pip3 install scrapyd-client)
文件配置
vim /usr/local/python3/lib/python3.7/site-packages/scrapyd/default_scrapyd.conf
啟動(dòng)
scrapyd
訪問(wèn) ip:6800,出現(xiàn)此頁(yè)面則啟動(dòng)成功
三、gerapy
3.1 簡(jiǎn)介
Gerapy 是一款分布式爬蟲(chóng)管理框架,支持 Python 3,基于 Scrapy、Scrapyd、Scrapyd-Client、Scrapy-Redis、Scrapyd-API、Scrapy-Splash、Jinjia2、Django、Vue.js 開(kāi)發(fā),Gerapy 可以幫助我們:
- 方便地控制爬蟲(chóng)運(yùn)行
- 直觀地查看爬蟲(chóng)狀態(tài)
- 實(shí)時(shí)地查看爬取結(jié)果
- 簡(jiǎn)單地實(shí)現(xiàn)項(xiàng)目部署
- 統(tǒng)一地實(shí)現(xiàn)主機(jī)管理
- 輕松地編寫(xiě)爬蟲(chóng)代碼
3.2 安裝使用
安裝
pip install gerapy(或pip3 install gerapy)
安裝完后先建立軟鏈接
ln -s /usr/local/python3/bin/gerapy /usr/bin/gerapy
初始化
gerapy init
初始化數(shù)據(jù)庫(kù)
cd gerapy gerapy migrate
報(bào)錯(cuò)sqllite 版本過(guò)低
解決辦法:升級(jí)sqllite
下載 wget https://www.sqlite.org/2019/sqlite-autoconf-3300000.tar.gz --no-check-certificate tar -zxvf sqlite-autoconf-3300000.tar.gz
安裝 mkdir /opt/sqlite cd sqlite-autoconf-3300000 ./configure --prefix=/opt/sqlite make && make install
建立軟連接 mv /usr/bin/sqlite3 /usr/bin/sqlite3_old ln -s /opt/sqlite/bin/sqlite3 /usr/bin/sqlite3 echo “/usr/local/lib” > /etc/ld.so.conf.d/sqlite3.conf ldconfig vim ~/.bashrc 添加 export LD_LIBRARY_PATH=“/usr/local/lib” source ~/.bashrc
查看當(dāng)前sqlite3的版本 sqlite3 --version
重新初始化gerapy 數(shù)據(jù)庫(kù)
配置賬密
gerapy createsuperuser
啟動(dòng)gerapy
gerapy runserver gerapy runserver 0.0.0.0:9000 # 外部訪問(wèn) 9000端口啟動(dòng)
由于沒(méi)有啟動(dòng)scrapy 這里的主機(jī)未0
啟動(dòng)scrapyd后,配置scrapyd的主機(jī)信息
配置成功后就會(huì)加入到主機(jī)列表里
四、scrapy+scrapyd+gerapy的結(jié)合使用
4.1 創(chuàng)建scrapy項(xiàng)目
進(jìn)到gerapy的項(xiàng)目目錄
cd ~/gerapy/projects/
然后新建一個(gè)scrapy項(xiàng)目
scrapy startproject gerapy_test scrapy genspider baidu_test www.baidu.com
修改scrapy.cfg 如下
在使用scrapyd-deploy 上傳到scrapyd,先建立軟連接再上傳
ln -s /usr/local/python3/bin/scrapyd-deploy /usr/bin/scrapyd-deploy scrapyd-deploy app -p gerapy_test
4.2 部署打包scrapy項(xiàng)目
然后再gerapy頁(yè)面上可以看到我們新建的項(xiàng)目,再打包一下
運(yùn)行之前還需修改下scrapy代碼
修改完后再運(yùn)行代碼
4.3 運(yùn)行
運(yùn)行成功,本次的部署就ok了!
五、填坑
5.1 運(yùn)行scrapy爬蟲(chóng)報(bào)錯(cuò)
解決辦法:修改lzma源代碼如下
try: from _lzma import * from _lzma import _encode_filter_properties, _decode_filter_properties except ImportError: from backports.lzma import * from backports.lzma import _encode_filter_properties, _decode_filter_properties
5.2 scrapyd 運(yùn)行 scrapy 報(bào)錯(cuò)
解決辦法:降低scrapy版本 pip3 install scrapy==2.5.1
到此這篇關(guān)于scrapy+scrapyd+gerapy 爬蟲(chóng)調(diào)度框架超詳細(xì)教程的文章就介紹到這了,更多相關(guān)scrapy+scrapyd+gerapy 爬蟲(chóng)調(diào)度框架內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python argparse中的action=store_true用法小結(jié)
這篇文章主要介紹了Python argparse中的action=store_true用法小結(jié),本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-02-02對(duì)pandas通過(guò)索引提取dataframe的行方法詳解
今天小編就為大家分享一篇對(duì)pandas通過(guò)索引提取dataframe的行方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-02-02python paramiko利用sftp上傳目錄到遠(yuǎn)程的實(shí)例
今天小編就為大家分享一篇python paramiko利用sftp上傳目錄到遠(yuǎn)程的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01Python argparse命令參數(shù)與config配置參數(shù)示例深入詳解
這篇文章主要介紹了Python argparse命令參數(shù)與config配置參數(shù),argparse是Python內(nèi)置的一個(gè)用于命令項(xiàng)選項(xiàng)與參數(shù)解析的模塊,通過(guò)在程序中定義好我們需要的參數(shù),然后在程序啟動(dòng)命令行傳遞我們想要改變的參數(shù)2023-03-03python tkinter實(shí)現(xiàn)彩球碰撞屏保
這篇文章主要為大家詳細(xì)介紹了python tkinter實(shí)現(xiàn)彩球碰撞屏保,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07Python面向?qū)ο蟮娜筇匦苑庋b、繼承、多態(tài)
這篇文章介紹了Python面向?qū)ο蟮娜筇匦苑庋b、繼承、多態(tài),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07python爬蟲(chóng)超時(shí)的處理的實(shí)例
今天小編就為大家分享一篇python爬蟲(chóng)超時(shí)的處理的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12學(xué)習(xí)Django知識(shí)點(diǎn)分享
在本篇文章里小編給大家整理的是關(guān)于學(xué)習(xí)Django的一些心得知識(shí)點(diǎn),對(duì)此有興趣的朋友們可以參考下。2019-09-09