爬蟲那些事-爬蟲設計思路
一、前言
爬蟲廣泛使用於搜尋引擎、新聞聚合以及大資料採集當中,一個良好的爬蟲系統需要考慮很多方面:爬蟲種子的獲取需要有個穩定的任務排程機制,下載頁面過程需要考慮到網頁內容的生成是否是需要js渲染,請求網頁是否需要設定請求頭,還有請求過多會不會被對方封鎖。另外就是資料處理過程,什麼頁面需要進行資料提取,什麼頁面是分裂成其它頁面,還有頁面內容提取需要採用什麼手段:比如css selector解析,xpath解析,還有許多內容是通過json格式返回 需要解析json,還有的內容是屬於xml,這就需要你都還有當獲取到結果之後需要對結果進行整理、規範化和持久化。
二、設計思路
圖2-1 設計思路
因為工作當中主要是對新聞內容進行抓取,所以結合新聞資訊進行處理。如圖2-1所示,一個典型的新聞網站會分兩個頁面進行展示,一個是列表頁一個是詳情頁,我們要從列表頁進行處理分裂出詳情頁,然後下載詳情頁進行處理提取裡面的詳情頁。最後對提取的結果進行處理,處理的結果後面可以接入其它流程如更進一步的清洗等,最後經過持久話的內容最終可以通過業務流程處理出去。當一個業務流程抓住輸入輸出,然後結構化和剖析這個流程後,就會知道怎麼進行設計了。
三、爬蟲系統架構圖
圖3-1 技術架構
相信接觸過scrapy及其它第三方開源抓取工具應該對上面的圖不會陌生,系統也是參考java一個比較出名的框架webmagic程式處理的,基於元件化進行開發:
爬蟲系統通過scheduler獲取待抓取任務,系統需要考慮到多種可排程的方式,這就需要設計一種可以通過配置選擇不同排程模組的功能,比如來自redis的任務排程、來自MQ的任務,也可能來自檔案和資料庫的排程。另外從頁面解析的request同樣也需要丟到scheduler進行排程。
Downloader下載器,下載網頁詳情有多種java中api提供java.net.URL、java.net.URLConnection 以及HttpClient進行下載,然後還有諸如Https的處理等。
PageProcess頁面處理器,通常情況下鎖抽取的內容就需要在這邊進行處理,同時可以分裂出新的連結,解析HTML可以自己定製使用JSOUP,XPATH以及json 、xml解析。
Pipeline負責抽取結果的處理,包括計算、持久化到檔案、資料庫等
三、整體的技術選型
圖3-2
如上圖所示,資料來源種子儲存在DB中,然後用redis快取,抓取系統基於redis做排程。排程程式和爬蟲主程式採用RabbitMQ(zeroMq,kafuka也可以)做解耦,然後抓取過程中可以用Redis做連結URL去重處理,然後如果網頁內容多種多樣可以用MongoDB 這種NoSql資料庫做儲存。利用其文件儲存以及key 、value的優勢進行非結構化的持久化,最後抓取的資料可以進一步推送到清洗程式中處理。然後處理後的資料最後存到關係型資料庫Mysql中,然後通過業務邏輯處理展示到PC和手機端。
上面就是整個爬蟲系統的設計。。
相關文章
- 【爬蟲】爬蟲專案推薦 / 思路爬蟲
- 【Python學習】爬蟲爬蟲爬蟲爬蟲~Python爬蟲
- python網路爬蟲(9)構建基礎爬蟲思路Python爬蟲
- 爬蟲:多程式爬蟲爬蟲
- 通用爬蟲與聚焦爬蟲爬蟲
- 爬蟲--Scrapy簡易爬蟲爬蟲
- python爬蟲---網頁爬蟲,圖片爬蟲,文章爬蟲,Python爬蟲爬取新聞網站新聞Python爬蟲網頁網站
- [爬蟲架構] 如何設計一個分散式爬蟲架構爬蟲架構分散式
- 反爬蟲之字型反爬蟲爬蟲
- 爬蟲進階:反反爬蟲技巧爬蟲
- 爬蟲爬蟲
- 不會Python爬蟲?教你一個通用爬蟲思路輕鬆爬取網頁資料Python爬蟲網頁
- 網路爬蟲——爬蟲實戰(一)爬蟲
- 【python爬蟲】python爬蟲demoPython爬蟲
- 那些年,我爬過的北科(四)——爬蟲進階之極簡併行爬蟲框架開發爬蟲框架
- 爬蟲專案(一)爬蟲+jsoup輕鬆爬知乎爬蟲JS
- 爬蟲與反爬蟲技術簡介爬蟲
- 爬蟲技術(二)-客戶端爬蟲爬蟲客戶端
- 2個月精通Python爬蟲——3大爬蟲框架+6場實戰+反爬蟲技巧+分散式爬蟲Python爬蟲框架分散式
- Python爬蟲怎麼設定動態IP代理,Python爬蟲要注意哪些事項?Python爬蟲
- request爬蟲爬蟲
- 爬蟲2爬蟲
- 科普:爬蟲爬蟲
- scrapy爬蟲爬蟲
- 爬蟲概述爬蟲
- app爬蟲APP爬蟲
- 爬蟲案例爬蟲
- Python網路爬蟲二三事Python爬蟲
- 爬蟲中網路請求的那些事之urllib庫爬蟲
- 3.21日 爬蟲小計爬蟲
- 網路爬蟲詳細設計方案爬蟲
- C#爬蟲與反爬蟲--字型加密篇C#爬蟲加密
- Python爬蟲教程-01-爬蟲介紹Python爬蟲
- Java爬蟲與Python爬蟲的區別?Java爬蟲Python
- 分散式爬蟲原理之分散式爬蟲原理分散式爬蟲
- 那些年,我爬過的北科(六)——反反爬蟲之js渲染爬蟲JS
- 在scrapy框架下建立爬蟲專案,建立爬蟲檔案,執行爬蟲檔案框架爬蟲
- 【python--爬蟲】彼岸圖網高清桌布爬蟲Python爬蟲