分布式爬蟲原理
什么是分布式爬蟲:
額,這個(gè)問題呢,我這樣解釋,例如爬取網(wǎng)站內(nèi)的二級(jí)網(wǎng)站,我們就需要獲取網(wǎng)站中的二級(jí)、三級(jí)...很多個(gè)網(wǎng)站,那么我們?nèi)绻米约阂慌_(tái)主機(jī)爬取明顯效率很低,這個(gè)時(shí)候我們就需要其他主機(jī)的幫助了,這個(gè)時(shí)候我們就將作為Master,為其他主機(jī)Slaver提供url的同時(shí),啟動(dòng)程序,沒錯(cuò),我們的工作就這么多,而Slaver主機(jī)的作用就是接收url,解析并獲取想要的數(shù)據(jù)。。。。
那么問題來了,我們?nèi)绾螌aster抓取到的網(wǎng)站分給別的主機(jī)呢?
那就需要數(shù)據(jù)庫(kù)了,而且是基于內(nèi)存的數(shù)據(jù)庫(kù),redis等。
redis安裝配置:http://www.runoob.com/redis/r...
配置中需要將redis.conf文件做簡(jiǎn)單的修改:將bind 127.0.0.1和rdbcompression yes注釋掉。
最后如何單線程抓取網(wǎng)頁呢?
你可以和自己的小伙伴試一試一個(gè)Master和多個(gè)Slaver一起獲取下bt影視網(wǎng)的網(wǎng)頁url,很有意思:
""" 爬蟲: for url in urls: r = requests.get(url) html_doc = r.text 多線程爬蟲: urls( 隊(duì)列 內(nèi)容) work( 從隊(duì)列中獲取url --> 發(fā)送請(qǐng)求 --> 解析response -- >保存數(shù)據(jù)) 創(chuàng)建多個(gè)線程,每個(gè)線程啟動(dòng)一個(gè)work,從而實(shí)現(xiàn)并發(fā),提高爬蟲效率 分布式爬蟲: urls(保存到redis中,因?yàn)閞edis可被多臺(tái)電腦訪問,從而實(shí)現(xiàn)分布式) 每臺(tái)電腦從redis內(nèi)存中獲取url-->發(fā)送請(qǐng)求 --> 解析response -- >保存數(shù)據(jù) 目標(biāo) : 使用分布式爬蟲,爬去http://www.btbtdy.net/btfl/dy30.html中所有頁 部署: Master端不需要任何修改(Master必須安裝redis server) Slaver端需要修改兩處: 1) 把rds = Redis("127.0.0.1",6379)修改成 rds = Redis("master的ip",6379) 2) 把第64行的代碼start_request()注釋掉 """ from redis import Redis import requests # pip install redis # 存儲(chǔ) urls REDIS_KEY = "btdy:urls" rds = Redis("127.0.0.1",6379) def fetch(url): """ 下載頁面,如果下載成功,返回response對(duì)象,否則返回None :param url:待爬取的url :return:返回response對(duì)象或者None """ r = requests.get(url) if r.status_code == 200: return r return None def start_request(): """ 獲取電視劇所有頁的地址,并把地址push到REDIS_KEY中 :return: """ start_url = "http://www.btbtdy.net/btfl/dy30.html" urls = ["http://www.btbtdy.net/btfl/dy30-{0}.html".format(str(page+1)) for page in range(62)] rds.lpush(REDIS_KEY,*urls) if __name__ == "__main__": # 從redis中的REDIS_URLS中獲取url start_request() while True: _, url = rds.blpop(REDIS_KEY) fetch(url)
爬蟲,,從入門到放棄,,,哈哈哈哈哈哈
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/42079.html
摘要:相關(guān)鏈接官方文檔安裝推薦使用安裝,命令如下命令執(zhí)行完畢之后即可完成安裝。的安裝是一個(gè)分布式管理模塊,本節(jié)來介紹一下的安裝方式。如果沒有錯(cuò)誤報(bào)出,則證明庫(kù)已經(jīng)安裝好了。上一篇文章網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)部署相關(guān)庫(kù)下一篇文章網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)爬蟲基礎(chǔ)基本原理 上一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---13、部署相關(guān)庫(kù)ScrapydClient、ScrapydAPI下一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)--...
摘要:阻塞,非阻塞首先,阻塞這個(gè)詞來自操作系統(tǒng)的線程進(jìn)程的狀態(tài)模型網(wǎng)絡(luò)爬蟲基本原理一后端掘金網(wǎng)絡(luò)爬蟲是捜索引擎抓取系統(tǒng)的重要組成部分。每門主要編程語言現(xiàn)未來已到后端掘金使用和在相同環(huán)境各加載多張小圖片,性能相差一倍。 2016 年度小結(jié)(服務(wù)器端方向)| 掘金技術(shù)征文 - 后端 - 掘金今年年初我花了三個(gè)月的業(yè)余時(shí)間用 Laravel 開發(fā)了一個(gè)項(xiàng)目,在此之前,除了去年換工作準(zhǔn)備面試時(shí),我并...
摘要:阻塞,非阻塞首先,阻塞這個(gè)詞來自操作系統(tǒng)的線程進(jìn)程的狀態(tài)模型網(wǎng)絡(luò)爬蟲基本原理一后端掘金網(wǎng)絡(luò)爬蟲是捜索引擎抓取系統(tǒng)的重要組成部分。每門主要編程語言現(xiàn)未來已到后端掘金使用和在相同環(huán)境各加載多張小圖片,性能相差一倍。 2016 年度小結(jié)(服務(wù)器端方向)| 掘金技術(shù)征文 - 后端 - 掘金今年年初我花了三個(gè)月的業(yè)余時(shí)間用 Laravel 開發(fā)了一個(gè)項(xiàng)目,在此之前,除了去年換工作準(zhǔn)備面試時(shí),我并...
摘要:分布式爬蟲框架詳解隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展與應(yīng)用的普及,網(wǎng)絡(luò)作為信息的載體,已經(jīng)成為社會(huì)大眾參與社會(huì)生活的一種重要信息渠道。下載器中間件位于引擎和下載器之間的框架,主要是處理引擎與下載器之間的請(qǐng)求及響應(yīng)。 scrapy-redis分布式爬蟲框架詳解 隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展與應(yīng)用的普及,網(wǎng)絡(luò)作為信息的載體,已經(jīng)成為社會(huì)大眾參與社會(huì)生活的一種重要信息渠道。由于互聯(lián)網(wǎng)是開放的,每個(gè)人都可以在網(wǎng)絡(luò)上...
閱讀 3348·2023-04-26 01:31
閱讀 1967·2023-04-25 22:08
閱讀 3628·2021-09-01 11:42
閱讀 2893·2019-08-30 12:58
閱讀 2253·2019-08-29 18:31
閱讀 2494·2019-08-29 17:18
閱讀 3121·2019-08-29 13:01
閱讀 2619·2019-08-28 18:22