黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國(guó)咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) hot資訊 scrapy-redis分布式爬蟲框架詳解

scrapy-redis分布式爬蟲框架詳解

更新時(shí)間:2021-08-17 09:19:04 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2092次

隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展與應(yīng)用的普及,網(wǎng)絡(luò)作為信息的載體,已經(jīng)成為社會(huì)大眾參與社會(huì)生活的一種重要信息渠道。由于互聯(lián)網(wǎng)是開(kāi)放的,每個(gè)人都可以在網(wǎng)絡(luò)上發(fā)表信息,內(nèi)容涉及各個(gè)方面。小到心情日志,大到國(guó)家大事。

互聯(lián)網(wǎng)已成為思想文化信息的集散地,并具有傳統(tǒng)媒體無(wú)法相比的優(yōu)勢(shì):便捷性,虛擬性,互動(dòng)性,多元性。網(wǎng)絡(luò)新聞熱點(diǎn)通常形成迅速,多是人們對(duì)于日常生活中的各種問(wèn)題發(fā)表的各種意見(jiàn),評(píng)論,態(tài)度,情緒等,隨著事件的發(fā)展而變化,是反映社會(huì)熱點(diǎn)的重要載體之一。

相比較而言,編寫爬蟲程序獲取到的海量數(shù)據(jù)更為真實(shí)、全面,在信息繁榮的互聯(lián)網(wǎng)時(shí)代更為行之有效。因此編寫爬蟲程序成為大數(shù)據(jù)時(shí)代信息收集的必備技能。

1.爬蟲收集數(shù)據(jù)的優(yōu)點(diǎn)

大數(shù)據(jù)時(shí)代下,人類社會(huì)的數(shù)據(jù)正以前所未有的速度增長(zhǎng),傳統(tǒng)的獲取數(shù)據(jù)的方式如問(wèn)卷調(diào)查、訪談法等,其樣本容量小、信度低、且受經(jīng)費(fèi)和地域范圍所限,因而收集的數(shù)據(jù)往往無(wú)法客觀反映研究對(duì)象,有著較大的局限性。

以不能滿足高質(zhì)量研究的需求。正如Ivor的理論所揭示的,如果輸入的是無(wú)效信息,無(wú)論處理的程序如何精良,輸出的都是無(wú)用信息“Garbage In,Garbage Out”。可見(jiàn),對(duì)比傳統(tǒng)的數(shù)據(jù)收集方法,立足于海量數(shù)據(jù)的研究有以下的優(yōu)點(diǎn):

(1)數(shù)據(jù)的真實(shí)性

數(shù)據(jù)的真實(shí)性,使用問(wèn)卷調(diào)查法收集的數(shù)據(jù),調(diào)查者難以了解被調(diào)查者是認(rèn)真填寫還是敷衍了事。使得得到的數(shù)據(jù)真實(shí)性不可靠,而通過(guò)爬蟲技術(shù)能快速獲取真實(shí)、客觀的用戶信息,如在社交網(wǎng)絡(luò)上對(duì)一個(gè)公司的評(píng)價(jià)顯然要比問(wèn)卷調(diào)查真實(shí),淘寶、美團(tuán)上消費(fèi)者對(duì)賣家的評(píng)論就比較客觀的反應(yīng)了商品的質(zhì)量。

(2)樣本容量

人類當(dāng)初發(fā)明計(jì)算機(jī)是因?yàn)樵诙?zhàn)時(shí)期工程師們已經(jīng)無(wú)法計(jì)算導(dǎo)彈的飛行軌跡,龐大的計(jì)算量迫使了計(jì)算機(jī)的發(fā)明,可見(jiàn)計(jì)算機(jī)天生就是來(lái)處理大規(guī)模批量的數(shù)據(jù),把人們從繁重的勞動(dòng)中解放出來(lái)。在同樣的成本下,人工采集和計(jì)算機(jī)采集的數(shù)據(jù)量不是一個(gè)量級(jí)的,爬蟲可以對(duì)互聯(lián)網(wǎng)上的海量數(shù)據(jù)進(jìn)行收集、分析,能更好的反應(yīng)客觀事實(shí),而數(shù)據(jù)越全面,分析研究的結(jié)果也就越真實(shí)。

2.爬蟲原理

網(wǎng)絡(luò)爬蟲(Web crawler),是一種按照一定的規(guī)則,自動(dòng)地抓取萬(wàn)維網(wǎng)信息的程序或者腳本,我們?yōu)g覽的網(wǎng)頁(yè)數(shù)以億計(jì),它們?cè)谑澜绺鞯氐姆?wù)器上存儲(chǔ)著。用戶點(diǎn)擊一個(gè)網(wǎng)頁(yè)的超鏈接以跳轉(zhuǎn)的方式來(lái)獲取另一個(gè)頁(yè)面的信息,而跳轉(zhuǎn)的頁(yè)面又有鏈接存在,網(wǎng)頁(yè)便由超鏈接組成一個(gè)巨大且錯(cuò)綜復(fù)雜的網(wǎng)。而Web爬蟲(Crawler),也稱蜘蛛(Spider),則是穿梭在這巨大的互聯(lián)網(wǎng)中下載網(wǎng)頁(yè)解析內(nèi)容的程序。它們被廣泛用于互聯(lián)網(wǎng)搜索引擎,可以自動(dòng)采集所有其能夠訪問(wèn)到的頁(yè)面內(nèi)容,以獲取或更新這些網(wǎng)站的內(nèi)容和檢索方式。

(1)爬蟲的應(yīng)用

在商務(wù)智能上,企業(yè)使用爬蟲收集競(jìng)爭(zhēng)對(duì)手的情報(bào)或在社交網(wǎng)絡(luò)、虛擬社區(qū)上爬取用戶對(duì)企業(yè)的評(píng)價(jià)從而在產(chǎn)品服務(wù)上做出改進(jìn)等。在數(shù)據(jù)研究上,爬蟲能快速收集互聯(lián)網(wǎng)上的信息,為數(shù)據(jù)分析提供原始資料。

(2)爬蟲算法流程

從功能上來(lái)講,爬蟲一般分為數(shù)據(jù)采集,處理,儲(chǔ)存三個(gè)部分。傳統(tǒng)爬蟲從一個(gè)或若干初始網(wǎng)頁(yè)的URL開(kāi)始,獲得初始網(wǎng)頁(yè)上的URL,在抓取網(wǎng)頁(yè)的過(guò)程中,不斷從當(dāng)前頁(yè)面上抽取新的URL放入隊(duì)列,直到滿足系統(tǒng)的一定停止條件。聚焦爬蟲的工作流程較為復(fù)雜,需要根據(jù)一定的網(wǎng)頁(yè)分析算法過(guò)濾與主題無(wú)關(guān)的鏈接,保留有用的鏈接將其放入等待抓取的URL隊(duì)列。然后,它將根據(jù)一定的搜索策略從隊(duì)列中選擇下一步要抓取的網(wǎng)頁(yè)URL,并重復(fù)上述過(guò)程,直到達(dá)到系統(tǒng)的某一條件時(shí)停止。另外,所有被爬蟲抓取的網(wǎng)頁(yè)將會(huì)被系統(tǒng)存貯,進(jìn)行一定的分析、過(guò)濾,并建立索引,以便之后的查詢和檢索;對(duì)于聚焦爬蟲來(lái)說(shuō),這一過(guò)程所得到的分析結(jié)果還可能對(duì)以后的抓取過(guò)程給出反饋和指導(dǎo)。

3.scrapy爬蟲框架

Scrapy是一個(gè)為了爬取網(wǎng)站數(shù)據(jù),提取結(jié)構(gòu)性數(shù)據(jù)而編寫的應(yīng)用框架。可以應(yīng)用在包括數(shù)據(jù)挖掘,信息處理或存儲(chǔ)歷史數(shù)據(jù)等一系列的程序中。其最初是為了頁(yè)面抓取 (更確切來(lái)說(shuō), 網(wǎng)絡(luò)抓取 )所設(shè)計(jì)的, 也可以應(yīng)用在獲取API所返回的數(shù)據(jù)(例如 Amazon Associates Web Services ) 或者通用的網(wǎng)絡(luò)爬蟲。Scrapy用途廣泛,可以用于數(shù)據(jù)挖掘、監(jiān)測(cè)和自動(dòng)化測(cè)試。

(1)scrapy整體架構(gòu)圖

(2)Scrapy主要組件

1)引擎(Scrapy): 用來(lái)處理整個(gè)系統(tǒng)的數(shù)據(jù)流處理, 觸發(fā)事務(wù)(框架核心)。

2)調(diào)度器(Scheduler): 用來(lái)接受引擎發(fā)過(guò)來(lái)的請(qǐng)求, 壓入隊(duì)列中, 并在引擎再次請(qǐng)求的時(shí)候返回. 可以想像成一個(gè)URL(抓取網(wǎng)頁(yè)的網(wǎng)址或者說(shuō)是鏈接)的優(yōu)先隊(duì)列, 由它來(lái)決定下一個(gè)要抓取的網(wǎng)址是什么, 同時(shí)去除重復(fù)的網(wǎng)址。

3)下載器(Downloader): 用于下載網(wǎng)頁(yè)內(nèi)容, 并將網(wǎng)頁(yè)內(nèi)容返回給蜘蛛(Scrapy下載器是建立在twisted這個(gè)高效的異步模型上的)。

4)爬蟲(Spiders): 爬蟲是主要干活的, 用于從特定的網(wǎng)頁(yè)中提取自己需要的信息, 即所謂的實(shí)體(Item)。用戶也可以從中提取出鏈接,讓Scrapy繼續(xù)抓取下一個(gè)頁(yè)面。

5)項(xiàng)目管道(Pipeline): 負(fù)責(zé)處理爬蟲從網(wǎng)頁(yè)中抽取的實(shí)體,主要的功能是持久化實(shí)體、驗(yàn)證實(shí)體的有效性、清除不需要的信息。當(dāng)頁(yè)面被爬蟲解析后,將被發(fā)送到項(xiàng)目管道,并經(jīng)過(guò)幾個(gè)特定的次序處理數(shù)據(jù)。

6)下載器中間件(Downloader Middlewares): 位于Scrapy引擎和下載器之間的框架,主要是處理Scrapy引擎與下載器之間的請(qǐng)求及響應(yīng)。

7)爬蟲中間件(Spider Middlewares): 介于Scrapy引擎和爬蟲之間的框架,主要工作是處理蜘蛛的響應(yīng)輸入和請(qǐng)求輸出。

8)調(diào)度中間件(Scheduler Middewares): 介于Scrapy引擎和調(diào)度之間的中間件,從Scrapy引擎發(fā)送到調(diào)度的請(qǐng)求和響應(yīng)。

4.scrapy-redis分布式

scrapy是python界出名的一個(gè)爬蟲框架。Scrapy是一個(gè)為了爬取網(wǎng)站數(shù)據(jù),提取結(jié)構(gòu)性數(shù)據(jù)而編寫的應(yīng)用框架。可以應(yīng)用在包括數(shù)據(jù)挖掘,信息處理或存儲(chǔ)歷史數(shù)據(jù)等一系列的程序中。

雖然scrapy能做的事情很多,但是要做到大規(guī)模的分布式應(yīng)用則捉襟見(jiàn)肘。有能人改變了scrapy的隊(duì)列調(diào)度,將起始的網(wǎng)址從start_urls里分離出來(lái),改為從redis讀取,多個(gè)客戶端可以同時(shí)讀取同一個(gè)redis,從而實(shí)現(xiàn)了分布式的爬蟲。

(1)scrapy-redis安裝

安裝:pip install scrapy-redis 官方站點(diǎn):https://github.com/rolando/scrapy-redis

(2)scrapy-redis架構(gòu)

(3)scrapy-Redis組件詳解

如上圖所示,scrapy-redis在scrapy的架構(gòu)上增加了redis,基于redis的特性拓展了如下四種組件:Scheduler,Duplication Filter,Item Pipeline,Base Spider

1)Scheduler: scrapy改造了python本來(lái)的collection.deque(雙向隊(duì)列)形成了自己的Scrapy

queue,但是Scrapy多個(gè)spider不能共享待爬取隊(duì)列Scrapy

queue,即Scrapy本身不支持爬蟲分布式,scrapy-redis 的解決是把這個(gè)Scrapy

queue換成redis數(shù)據(jù)庫(kù)(也是指redis隊(duì)列),從同一個(gè)redis-server存放要爬取的request,便能讓多個(gè)spider去同一個(gè)數(shù)據(jù)庫(kù)里讀取。Scrapy中跟“待爬隊(duì)列”直接相關(guān)的就是調(diào)度器Scheduler,它負(fù)責(zé)對(duì)新的request進(jìn)行入列操作(加入Scrapy

queue),取出下一個(gè)要爬取的request(從Scrapy

queue中取出)等操作。它把待爬隊(duì)列按照優(yōu)先級(jí)建立了一個(gè)字典結(jié)構(gòu),然后根據(jù)request中的優(yōu)先級(jí),來(lái)決定該入哪個(gè)隊(duì)列,出列時(shí)則按優(yōu)先級(jí)較小的優(yōu)先出列。為了管理這個(gè)比較高級(jí)的隊(duì)列字典,Scheduler需要提供一系列的方法。但是原來(lái)的Scheduler已經(jīng)無(wú)法使用,所以使用Scrapy-redis的scheduler組件。

2)Duplication Filter

Scrapy中用集合實(shí)現(xiàn)這個(gè)request去重功能,Scrapy中把已經(jīng)發(fā)送的request指紋放入到一個(gè)集合中,把下一個(gè)request的指紋拿到集合中比對(duì),如果該指紋存在于集合中,說(shuō)明這個(gè)request發(fā)送過(guò)了,如果沒(méi)有則繼續(xù)操作。

3)Item Pipeline:

引擎將(Spider返回的)爬取到的Item給Item Pipeline,scrapy-redis 的Item Pipeline將爬取到的

Item 存入redis的 items queue。修改過(guò)Item Pipeline可以很方便的根據(jù) key 從 items queue

提取item,從而實(shí)現(xiàn) items processes集群。

4)Base Spider

不在使用scrapy原有的Spider類,重寫的RedisSpider繼承了Spider和RedisMixin這兩個(gè)類,RedisMixin是用來(lái)從redis讀取url的類。

當(dāng)我們生成一個(gè)Spider繼承RedisSpider時(shí),調(diào)用setup_redis函數(shù),這個(gè)函數(shù)會(huì)去連接redis數(shù)據(jù)庫(kù),然后會(huì)設(shè)置signals(信號(hào)):一個(gè)是當(dāng)spider空閑時(shí)候的signal,會(huì)調(diào)用spider_idle函數(shù),這個(gè)函數(shù)調(diào)用schedule_next_request函數(shù),保證spider是一直活著的狀態(tài),并且拋出DontCloseSpider異常。一個(gè)是當(dāng)抓到一個(gè)item時(shí)的signal,會(huì)調(diào)用item_scraped函數(shù),這個(gè)函數(shù)會(huì)調(diào)用schedule_next_request函數(shù),獲取下一個(gè)request。

5)總結(jié)

總結(jié)一下scrapy-redis的總體思路:這套組件通過(guò)重寫scheduler和spider類,實(shí)現(xiàn)了調(diào)度、spider啟動(dòng)和redis的交互;

實(shí)現(xiàn)新的dupefilter和queue類,達(dá)到了判重和調(diào)度容器和redis的交互,因?yàn)槊總€(gè)主機(jī)上的爬蟲進(jìn)程都訪問(wèn)同一個(gè)redis數(shù)據(jù)庫(kù),所以調(diào)度和判重都統(tǒng)一進(jìn)行統(tǒng)一管理,達(dá)到了分布式爬蟲的目的;當(dāng)spider被初始化時(shí),同時(shí)會(huì)初始化一個(gè)對(duì)應(yīng)的scheduler對(duì)象,這個(gè)調(diào)度器對(duì)象通過(guò)讀取settings,配置好自己的調(diào)度容器queue和判重工具dupefilter;

每當(dāng)一個(gè)spider產(chǎn)出一個(gè)request的時(shí)候,scrapy引擎會(huì)把這個(gè)reuqest遞交給這個(gè)spider對(duì)應(yīng)的scheduler對(duì)象進(jìn)行調(diào)度,scheduler對(duì)象通過(guò)訪問(wèn)redis對(duì)request進(jìn)行判重,如果不重復(fù)就把他添加進(jìn)redis中的調(diào)度器隊(duì)列里。當(dāng)調(diào)度條件滿足時(shí),scheduler對(duì)象就從redis的調(diào)度器隊(duì)列中取出一個(gè)request發(fā)送給spider,讓他爬取;

當(dāng)spider爬取的所有暫時(shí)可用url之后,scheduler發(fā)現(xiàn)這個(gè)spider對(duì)應(yīng)的redis的調(diào)度器隊(duì)列空了,于是觸發(fā)信號(hào)spider_idle,spider收到這個(gè)信號(hào)之后,直接連接redis讀取strart_url池,拿去新的一批url入口,然后再次重復(fù)上邊的工作。

以上就是動(dòng)力節(jié)點(diǎn)小編介紹的"scrapy-redis分布式爬蟲框架詳解",希望對(duì)大家有幫助,想了解更多可查看Java分布式應(yīng)用教程。動(dòng)力節(jié)點(diǎn)在線學(xué)習(xí)教程,針對(duì)沒(méi)有任何Java基礎(chǔ)的讀者學(xué)習(xí),讓你從入門到精通,主要介紹了一些Java基礎(chǔ)的核心知識(shí),讓同學(xué)們更好更方便的學(xué)習(xí)和了解Java編程,感興趣的同學(xué)可以關(guān)注一下。

提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 在线免费观看视频黄 | 国产色视频在线观看免费 | 亚洲欧美精品网站在线观看 | 日韩亚洲一区中文字幕 | 日韩免费中文字幕 | 女性特黄一级毛片 | 欧美成人免费高清网站 | 久久99网站| 欧美综合图区亚洲综合图区 | 一级毛片 在线播放 | 伊人热| 九九在线精品视频播放 | 日本二区在线观看 | 丁香天五香天堂园 | 一级毛片a女人刺激视频免费 | 国产视频网 | 中文字幕亚洲一区二区三区 | 免费黄色网址在线播放 | 黄色影院在线观看 | 最近免费中文字幕视频高清在线看 | 久久久国产视频 | 在线午夜 | 一级黄色录像毛片 | 成 人 动漫在线观看网站网站 | 7m视频在线观看高清国产7m | 制服美女视频一区 | 一个人www在线视频 一二三四在线视频社区8 | 岛国午夜精品视频在线观看 | 高清欧美在线三级视频 | 亚洲一区二区三区在线免费观看 | 天天干天天拍 | 丁香网五月网 | 色黄三大片免费 | 永久免费av网站 | 丁香五月缴情在线 | 国产精品视频免费播放 | 欧美又粗又硬又大久久久 | 国内日本精品视频在线观看 | 日韩女同一区二区三区 | 国产亚洲综合一区 柠檬导航 | 亚洲国产精品视频 |