国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

從0-1打造最強性能Scrapy爬蟲集群

vincent_xyb / 1955人閱讀

摘要:包括爬蟲編寫爬蟲避禁動態(tài)網(wǎng)頁數(shù)據(jù)抓取部署分布式爬蟲系統(tǒng)監(jiān)測共六個內(nèi)容,結(jié)合實際定向抓取騰訊新聞數(shù)據(jù),通過測試檢驗系統(tǒng)性能。

1 項目介紹

本項目的主要內(nèi)容是分布式網(wǎng)絡(luò)新聞抓取系統(tǒng)設(shè)計與實現(xiàn)。主要有以下幾個部分來介紹:

(1)深入分析網(wǎng)絡(luò)新聞爬蟲的特點,設(shè)計了分布式網(wǎng)絡(luò)新聞抓取系統(tǒng)爬取策略、抓取字段、動態(tài)網(wǎng)頁抓取方法、分布式結(jié)構(gòu)、系統(tǒng)監(jiān)測和數(shù)據(jù)存儲六個關(guān)鍵功能。

(2)結(jié)合程序代碼分解說明分布式網(wǎng)絡(luò)新聞抓取系統(tǒng)的實現(xiàn)過程。包括爬蟲編寫、爬蟲避禁、動態(tài)網(wǎng)頁數(shù)據(jù)抓取、部署分布式爬蟲、系統(tǒng)監(jiān)測共六個內(nèi)容,結(jié)合實際定向抓取騰訊新聞數(shù)據(jù),通過測試檢驗系統(tǒng)性能。

(3)規(guī)劃設(shè)計了包括數(shù)據(jù)清洗、編碼轉(zhuǎn)換、數(shù)據(jù)分類、對象添加等功能組成的數(shù)據(jù)處理模塊。

分布式網(wǎng)絡(luò)新聞抓取系統(tǒng)的設(shè)計
2.1 系統(tǒng)總體架構(gòu)設(shè)計

系統(tǒng)采用分布式主從結(jié)構(gòu),設(shè)置 1 個 Master 服務(wù)器和多個Slave 服務(wù)器,Master管理 Redis 數(shù)據(jù)庫和分發(fā)下載任務(wù),Slave 部署 Scrapy 抓取網(wǎng)頁和解析提取項目數(shù)據(jù)。服務(wù)器的基本環(huán)境是 Ubuntu 操作系統(tǒng),Master 服務(wù)器安裝 Redis 數(shù)據(jù)庫服務(wù)器和 Graphite,

Slave 安裝 Scrapy 和 Redis 客戶端。系統(tǒng)按功能可劃分為兩個主要模塊,一是數(shù)據(jù)抓取模塊,二是數(shù)據(jù)處理模塊。數(shù)據(jù)抓取模塊包含瀏覽器調(diào)用、網(wǎng)頁下載、字段提取、爬蟲避禁、數(shù)據(jù)存儲和系統(tǒng)監(jiān)測六個功能;數(shù)據(jù)處理模塊包含數(shù)據(jù)清洗、對象添加、編碼轉(zhuǎn)換和數(shù)據(jù)分類四個功能。

2.2 爬取策略的設(shè)計

本項目網(wǎng)絡(luò)爬蟲采用深度優(yōu)先的爬取策略,根據(jù)設(shè)定下載網(wǎng)頁數(shù)據(jù)。網(wǎng)頁鏈接處理流程如下:

1. 手動設(shè)置初始下載地址,一般為網(wǎng)站導(dǎo)航地址。

2. 爬蟲開始運行并從初始地址抓取第一批網(wǎng)頁鏈接。

3. 爬蟲根據(jù)正則表達式識別新鏈接中的目錄頁地址和新聞內(nèi)容頁地址,識別的新地址加入待下載隊列,等待抓取,未被識別的網(wǎng)頁地址被定義為無用鏈接丟掉。

4. 爬蟲從待下載隊列中依次取出網(wǎng)頁鏈接下載和提取數(shù)據(jù)。

5. 下載隊列為空,爬蟲停止抓取。

新聞?wù)军c的導(dǎo)航頁面數(shù)量是有限的,這一規(guī)律決定了在一定的人工參與下可以輕松獲取新聞導(dǎo)航頁面的 url,并將其作為爬蟲系統(tǒng)的初始 url。
2.3 爬取字段的設(shè)計

本項目以網(wǎng)絡(luò)新聞數(shù)據(jù)抓取為抓取目標(biāo),因此抓取內(nèi)容必須能夠客觀準(zhǔn)確地反應(yīng)網(wǎng)絡(luò)新聞特征。

以抓取騰訊網(wǎng)絡(luò)新聞數(shù)據(jù)為例,通過分析網(wǎng)頁結(jié)構(gòu),本文確定了兩步抓取步驟。第一步,抓取新聞內(nèi)容頁,獲得新聞標(biāo)題、新聞來源、新聞內(nèi)容、發(fā)表時間、評論數(shù)量、評論地址、相關(guān)搜索、用戶還喜歡的新聞和喜歡人數(shù)共 9 個內(nèi)容;第二步,在獲得評論地址后,抓取評論頁,獲得評論人 ID、評論人昵稱,評論人性別、評論人所在地區(qū)、評論時間、評論內(nèi)容、單條評論支持人數(shù)和單條評論回復(fù)數(shù)量等內(nèi)容。

2.4 動態(tài)網(wǎng)頁抓取方法設(shè)計

騰訊新聞網(wǎng)頁使用 Java Script 生成動態(tài)網(wǎng)頁內(nèi)容。一些 JS 事件觸發(fā)的頁面內(nèi)容在打開時發(fā)生變化,一些網(wǎng)頁在沒有 JS 支持的情況下根本不工作。一般的爬蟲根本無法從這些網(wǎng)頁獲取數(shù)據(jù)。 解決 JavaScript 動態(tài)網(wǎng)頁的抓取問題有四種方法:

1.寫代碼模擬相關(guān) JS 邏輯。

2.調(diào)用有界面的瀏覽器,類似各種廣泛用于測試的,如 Selenium 等。

3.使用無界面的瀏覽器,各種基于Webkit的,如 Casperjs、Phantomjs 等。

4.結(jié)合 JS 執(zhí)行引擎,實現(xiàn)一個輕量級的瀏覽器。

本項目由于是基于Python作為主要語言來編寫,因此采用使用 Selenium 來處理 JS

動態(tài)新聞頁面。它的優(yōu)點是簡單、易于實現(xiàn)。用Python 代碼模擬用戶對瀏覽器的操作,將網(wǎng)頁先加載到瀏覽器中打開,再從瀏覽器緩存中獲取網(wǎng)頁數(shù)據(jù),傳遞到 spider 解析提取,最后傳遞目標(biāo)數(shù)據(jù)到項目通道。

2.5爬蟲分布式設(shè)計

應(yīng)用 Redis 數(shù)據(jù)庫實現(xiàn)分布式抓取。基本思想是 Scrapy 爬蟲獲取到的urls(request)

都放到一個 Redis Queue中,所有爬蟲也都從指定 Redis Queue中獲取request(urls)。

Scrapy-Redis 中默認(rèn)使用Spider Priority Queue 來確定 url 的先后次序,這是由 sorted set

實現(xiàn)的一種非 FIFO、LIFO方式。

Redis 中存儲了 Scrapy 工程的request 和 stats 信息,根據(jù)這些信息可以掌握任務(wù)

情況和爬蟲狀態(tài),分配任務(wù)時便于均衡系統(tǒng)負(fù)載,有助于克服爬蟲的性能瓶頸。同時

利用 Redis 的高性能和易于擴展的特點能夠輕松實現(xiàn)高效率下載。當(dāng) Redis 存儲或者

訪問速度遇到問題時,可以通過增大 Redis 集群數(shù)和爬蟲集群數(shù)量改善。Scrapy-Redis

分布式方案很好解決了中斷續(xù)抓取以及數(shù)據(jù)去重問題,爬蟲重新啟動后,會對照 Redis

隊列中的url 進行抓取,已經(jīng)抓取的url 將自動過濾掉。

2.6 基于Graphite系統(tǒng)監(jiān)測組件設(shè)計

運用 Graphite 監(jiān)測系統(tǒng)運行狀態(tài),實現(xiàn)了一個針對分布式系統(tǒng)的 statscollector,

將系統(tǒng)的 stats 信息以圖表形式動態(tài)實時顯示,即實時監(jiān)測。Graphite 監(jiān)測的信息有:系統(tǒng)的下載信息、日志信息、文件計數(shù)、調(diào)度信息、爬蟲運行信息、爬蟲異常信息、文件數(shù)量、獲得 Item 數(shù)量、最大請求深度和收到的回應(yīng)數(shù)量等。

2.7 數(shù)據(jù)存儲模塊的設(shè)計

Scrapy 支持?jǐn)?shù)據(jù)存儲為 json、csv 和 xml 等文本格式,用戶可以在運行爬蟲時設(shè)置,例如:scrapy crawlspider –o items.json –t json,也可以在 Scrapy 工程文件的Item Pipeline

文件中定義。除此之外,Scrapy 提供了多種數(shù)據(jù)庫 API支持?jǐn)?shù)據(jù)庫存儲。如 Mongo DB、

Redis 等。數(shù)據(jù)存儲分兩個部分,一是網(wǎng)頁鏈接的存儲,二是項目數(shù)據(jù)的存儲。網(wǎng)頁鏈接存

儲于 Redis 數(shù)據(jù)庫,用于實現(xiàn)分布式爬蟲的下載管理;項目數(shù)據(jù)包括新聞數(shù)據(jù)和評論數(shù)據(jù),為方便處理,均保存為 JSON 格式的文本文件。評論數(shù)據(jù)存儲時以評論 url 中包含的評論ID 命名,通過這種方法可以將新聞數(shù)據(jù)與評論數(shù)據(jù)關(guān)聯(lián)起來。

3 項目總結(jié)

以上就是分布式網(wǎng)絡(luò)新聞抓取系統(tǒng)的系統(tǒng)設(shè)計部分,采用分布式的設(shè)計是因為單機爬蟲的爬取量和爬取速度的局限性,總體設(shè)計部分如上所示。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/40913.html

相關(guān)文章

  • Scrapy-Cluster結(jié)合Spiderkeeper管理分布式爬蟲

    摘要:分布式爬蟲,分發(fā)網(wǎng)址是基于地址。注意要使用管理同一個集群,爬蟲項目名稱須一致,同時集群中配置相同任務(wù)瀏覽器訪問啟動爬蟲時即可看見兩個集群配置,啟動同名爬蟲開始分布式爬蟲啟動分布式爬蟲后狀態(tài) Scrapy-cluster 建設(shè) 基于Scrapy-cluster庫的kafka-monitor可以實現(xiàn)分布式爬蟲 Scrapyd+Spiderkeeper實現(xiàn)爬蟲的可視化管理 環(huán)境 IP...

    bingo 評論0 收藏0
  • python爬蟲入門(一)

    摘要:想辦法區(qū)分爬蟲程序和正常的用戶。爬蟲是工具性程序,對速度和效率要求較高。生態(tài)圈完善,是最大對手。最要命的是爬蟲需要經(jīng)常修改部分代碼。爬蟲分類通用爬蟲也就是百度搜狐等搜索引擎。原本是為測試來測試網(wǎng)站的,后來成了爬蟲工程師最喜愛的工具。 一、爬蟲的基本知識: 1. 什么是爬蟲 爬蟲的英文翻譯為spider或者crawder,意為蜘蛛或者爬行者,從字面意思我們可以體會到:爬蟲就是把自己當(dāng)做蜘...

    lentrue 評論0 收藏0
  • 部署Scrapy分布式爬蟲項目

    摘要:以上示例代表當(dāng)發(fā)現(xiàn)條或條以上的級別的時,自動停止當(dāng)前任務(wù),如果當(dāng)前時間在郵件工作時間內(nèi),則同時發(fā)送通知郵件。 showImg(https://segmentfault.com/img/remote/1460000018052810); 一、需求分析 初級用戶: 只有一臺開發(fā)主機 能夠通過 Scrapyd-client 打包和部署 Scrapy 爬蟲項目,以及通過 Scrapyd JS...

    techstay 評論0 收藏0
  • 如何通過 Scrapyd + ScrapydWeb 簡單高效地部署和監(jiān)控分布式爬蟲項目

    摘要:支持一鍵部署項目到集群。添加郵箱帳號設(shè)置郵件工作時間和基本觸發(fā)器,以下示例代表每隔小時或當(dāng)某一任務(wù)完成時,并且當(dāng)前時間是工作日的點,點和點,將會發(fā)送通知郵件。除了基本觸發(fā)器,還提供了多種觸發(fā)器用于處理不同類型的,包括和等。 showImg(https://segmentfault.com/img/remote/1460000018772067?w=1680&h=869); 安裝和配置 ...

    zsirfs 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<