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

2021-09-14 08:00:04 字數 1663 閱讀 8556

1 專案介紹

本專案的主要內容是分布式網路新聞抓取系統設計與實現。主要有以下幾個部分來介紹:

(1)深入分析網路新聞爬蟲的特點,設計了分布式網路新聞抓取系統爬取策略、抓取字段、動態網頁抓取方法、分布式結構、系統監測和資料儲存六個關鍵功能。

(3)規劃設計了包括資料清洗、編碼轉換、資料分類、物件新增等功能組成的資料處理模組。

分布式網路新聞抓取系統的設計

2.1 系統總體架構設計

2.2 爬取策略的設計

新聞站點的導航頁面數量是有限的,這一規律決定了在一定的人工參與下可以輕鬆獲取新聞導航頁面的 url,並將其作為爬蟲系統的初始 url。

2.3 爬取字段的設計

本專案以網路新聞資料抓取為抓取目標,因此抓取內容必須能夠客觀準確地反應網路新聞特徵。

2.4 動態網頁抓取方法設計

1.寫**模擬相關 js 邏輯。

2.呼叫有介面的瀏覽器,類似各種廣泛用於測試的,如 selenium 等。

3.使用無介面的瀏覽器,各種基於webkit的,如 casperjs、phantomjs 等。

4.結合 js 執行引擎,實現乙個輕量級的瀏覽器。

本專案由於是基於python作為主要語言來編寫,因此採用使用 selenium 來處理 js

動態新聞頁面。它的優點是簡單、易於實現。用python **模擬使用者對瀏覽器的操作,將網頁先載入到瀏覽器中開啟,再從瀏覽器快取中獲取網頁資料,傳遞到 spider 解析提取,最後傳遞目標資料到專案通道。

2.5爬蟲分布式設計

應用 redis 資料庫實現分布式抓取。基本思想是 scrapy 爬蟲獲取到的urls(request)

都放到乙個 redis queue中,所有爬蟲也都從指定 redis queue中獲取request(urls)。

scrapy-redis 中預設使用spider priority queue 來確定 url 的先後次序,這是由 sorted set

實現的一種非 fifo、lifo方式。

redis 中儲存了 scrapy 工程的request 和 stats 資訊,根據這些資訊可以掌握任務

情況和爬蟲狀態,分配任務時便於均衡系統負載,有助於克服爬蟲的效能瓶頸。同時

訪問速度遇到問題時,可以通過增大 redis 集群數和爬蟲集群數量改善。scrapy-redis

分布式方案很好解決了中斷續抓取以及資料去重問題,爬蟲重新啟動後,會對照 redis

佇列中的url 進行抓取,已經抓取的url 將自動過濾掉。

2.6 基於graphite系統監測元件設計

運用 graphite 監測系統執行狀態,實現了乙個針對分布式系統的 statscollector,

2.7 資料儲存模組的設計

scrapy 支援資料儲存為 json、csv 和 xml 等文字格式,使用者可以在執行爬蟲時設定,例如:scrapy crawlspider –o items.json –t json,也可以在 scrapy 工程檔案的item pipeline

檔案中定義。除此之外,scrapy 提供了多種資料庫 api支援資料庫儲存。如 mongo db、

redis 等。資料儲存分兩個部分,一是網頁鏈結的儲存,二是專案資料的儲存。網頁鏈結存

3 專案總結

以上就是分布式網路新聞抓取系統的系統設計部分,採用分布式的設計是因為單機爬蟲的爬取量和爬取速度的侷限性,總體設計部分如上所示。

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

1 專案介紹 本專案的主要內容是分布式網路新聞抓取系統設計與實現。主要有以下幾個部分來介紹 1 深入分析網路新聞爬蟲的特點,設計了分布式網路新聞抓取系統爬取策略 抓取字段 動態網頁抓取方法 分布式結構 系統監測和資料儲存六個關鍵功能。3 規劃設計了包括資料清洗 編碼轉換 資料分類 物件新增等功能組成...

mvc 從0打造自己的框架

入口檔案 定義常量 引入函式庫 自動載入類 啟動框架 路由解析 載入控制器 返回結果 01先從入口檔案開始 1 定義常量,當前框架的根目錄核心檔案在的目錄專案在的目錄define mvc realpath define core mvc.core 2 載入函式庫3 啟動框架02 自動載入類 當我們n...

從0打造自己的mvc框架2

2 4載入控制器 判斷控制器是否存在如果不存在就給出乙個提醒,如果存在就顯示控制器裡的內容 class indexcontroller extends core imooc 效果顯示 2 5模型類 與資料庫建立連線 首先建立乙個model類 namespace core lib class mode...