網路爬蟲詳細設計方案
目錄
網路爬蟲設計方案
1、網路爬蟲簡介
網頁爬蟲,是一種按照一定的規則,自動地抓取全球資訊網資訊的程式或者指令碼;其使用場景極其廣泛,各大搜索引擎(如百度,谷歌,Bing)中都有他們的身影。網路爬蟲按照系統結構和實現技術,大致分為以下幾種型別:通用網路爬蟲,聚焦網路爬蟲,增量式網路爬蟲,深層網路爬蟲。
2、Java爬蟲的開發和使用流程
2.1 下載
(1)選擇並使用網路工具包(例如HttpClient)下載指定url的網頁原始碼
(2)使用get/post的方式提交請求
(3)設定請求的headers引數
(4)置請求的cookies引數
(5)設定請求的query/formData引數
(6)使用代理IP
(7)分析目的請求的各種必要引數的來源
(8)對於分析和解決成本過大的請求,可以使用模擬瀏覽器進行下載(推薦無介面瀏覽器phantomjs+selenium)
2.2 分析
(1)對於Html形式的文字,使用Jsoup等工具包解析;
(2)對於json格式的文字,使用Gson等工具包解析;
(3)對於沒有固定格式,無法用特定工具解析的文字,使用正則表示式工具獲取目標資料。
3、單點登陸與Jsoup解析
河南的應用場景與吉林的應用場景基本相似,都是訪問第三方門戶系統,根據相應需求抓取相關網頁資料。依據吉林的開發情況,河南開發也需要有單點登陸與使用Jsoup進行頁面解析重要的兩個部分。目前單點登陸有兩套方案,吉林前期使用的單點登陸方案使用過程需要進行相關引數的修改,後期使用的單點登陸方案操作起來比較方便,但業務邏輯相對複雜一點,這個在河南部署的時候綜合考慮。
3.1 單點登陸簡介
單點登入全稱Single Sign On(以下簡稱SSO),是指在多系統應用群中登入一個系統,便可在其他所有系統中得到授權而無需再次登入,包括單點登入與單點登出兩部分。
3.1.1 登陸
相比於單系統登入,sso需要一個獨立的認證中心,只有認證中心能接受使用者的使用者名稱密碼等安全資訊,其他系統不提供登入入口,只接受認證中心的間接授權。間接授權通過令牌實現,sso認證中心驗證使用者的使用者名稱密碼沒問題,建立授權令牌,在接下來的跳轉過程中,授權令牌作為引數傳送給各個子系統,子系統拿到令牌,即得到了授權,可以藉此建立區域性會話,區域性會話登入方式與單系統的登入方式相同。如圖示:
- 使用者訪問系統1的受保護資源,系統1發現使用者未登入,跳轉至sso認證中心,並將自己的地址作為引數
- sso認證中心發現使用者未登入,將使用者引導至登入頁面
- 使用者輸入使用者名稱密碼提交登入申請
- sso認證中心校驗使用者資訊,建立使用者與sso認證中心之間的會話,稱為全域性會話,同時建立授權令牌
- sso認證中心帶著令牌跳轉會最初的請求地址(系統1)
- 系統1拿到令牌,去sso認證中心校驗令牌是否有效
- sso認證中心校驗令牌,返回有效,註冊系統1
- 系統1使用該令牌建立與使用者的會話,稱為區域性會話,返回受保護資源
- 使用者訪問系統2的受保護資源
- 系統2發現使用者未登入,跳轉至sso認證中心,並將自己的地址作為引數
- sso認證中心發現使用者已登入,跳轉回系統2的地址,並附上令牌
- 系統2拿到令牌,去sso認證中心校驗令牌是否有效
- sso認證中心校驗令牌,返回有效,註冊系統2
- 系統2使用該令牌建立與使用者的區域性會話,返回受保護資源
使用者登入成功後,會與sso認證中心及各個子系統建立會話,使用者與sso認證中心建立的會話稱為全域性會話,使用者與各個子系統建立的會話稱為區域性會話,區域性會話建立之後,使用者訪問子系統受保護資源將不再通過sso認證中心,全域性會話與區域性會話有如下約束關係:
- 區域性會話存在,全域性會話一定存在
- 全域性會話存在,區域性會話不一定存在
- 全域性會話銷燬,區域性會話必須銷燬
3.1.2 登出
單點登入自然也要單點登出,在一個子系統中登出,所有子系統的會話都將被銷燬,用下面的圖來說明:
sso認證中心一直監聽全域性會話的狀態,一旦全域性會話銷燬,監聽器將通知所有註冊系統執行登出操作。
簡要說明上圖:
- 使用者向系統1發起登出請求
- 系統1根據使用者與系統1建立的會話id拿到令牌,向sso認證中心發起登出請求
- sso認證中心校驗令牌有效,銷燬全域性會話,同時取出所有用此令牌註冊的系統地址
- sso認證中心向所有註冊系統發起登出請求
- 各註冊系統接收sso認證中心的登出請求,銷燬區域性會話
- sso認證中心引導使用者至登入頁面
注:單點登陸目前有兩套系統,其原始碼都將以附件的形式呈送。
3.2 Jsoup網頁解析
Jsoup使用起來比較簡單,有過Jquery使用經歷的會很快上手。使用Jsoup進行頁面解析,其實就是使用選擇器針對大資料量的網頁進行篩選,獲得所需要的資料。
常用選擇器語法如下:
Elements links = doc.select("a[href]"); //帶有href屬性的a元素
Elements pngs = doc.select("img[src$=.png]");//副檔名為.png的圖片
Element masthead = doc.select("div.masthead").first();//class等於masthead的div標籤
Elements resultLinks = doc.select("h3.r > a"); //在h3元素之後的a元素
Selector選擇器概述:
tagname: 通過標籤查詢元素,比如:a
ns|tag: 通過標籤在名稱空間查詢元素,比如:可以用 fb|name 語法來查詢 <fb:name> 元素
#id: 通過ID查詢元素,比如:#logo
.class: 通過class名稱查詢元素,比如:.masthead
[attribute]: 利用屬性查詢元素,比如:[href]
[^attr]: 利用屬性名字首來查詢元素,比如:可以用[^data-] 來查詢帶有HTML5 Dataset屬性的元素
[attr=value]: 利用屬性值來查詢元素,比如:[width=500]
[attr^=value], [attr$=value], [attr*=value]: 利用匹配屬性值開頭、結尾或包含屬性值來查詢元素,比如:[href*=/path/]
[attr~=regex]: 利用屬性值匹配正則表示式來查詢元素,比如: img[src~=(?i)\.(png|jpe?g)]
*: 這個符號將匹配所有元素
4、網路爬蟲詳細設計
4.1 業務流程圖
4.2 業務流程
爬蟲服務可拆分為3個服務:
4.2.1 模擬登陸服務
提供對外介面,使用者傳入使用者名稱、密碼、URL、待訪問系統、返回型別,系統根據返回型別返回HTML程式碼或者Cookie資訊
4.2.2 資料服務
新聞、公告資訊爬取步驟:
- tomcat啟動
- 爬取新聞資訊和公告資訊
- 獲取繫結使用者數,根據繫結使用者數計算使用的執行緒數
- 為執行緒分配使用者
- 開始爬取,並刪除臨時表資訊
- 資料入臨時表
- 資料驗證,用於處理爬取失敗的使用者,正式表的資料不刪除
- 刪除正式表資料
- 臨時表資料同步至正式
- 判斷所有執行緒結束後,返回3
- 需要記錄日誌,直接寫入檔案,記錄內容:啟動時間、執行緒數、使用者數、成功使用者數、成功資料量、失敗使用者數
4.2.3 解析服務
步驟:
- 使用者session資訊判斷,使用者session存在的直接使用session訪問,不存在的登入
- 登入至雲門戶
- 登入至業務系統
- 爬取頁面資訊
- 解析頁面
- 形成json資料
- 實時獲得工單列表條目數和工單詳細資訊大致流程與解析服務一致,其實就是多爬取了一次工單列表頁面,不進行入庫處理,實時返回工單列表數量。上述解析服務流程基本可以滿足常見的頁面資料爬取工作,對於涉及互動方面的則需根據具體情況來分析。
4.3 tomcat監控
需要使用shell指令碼對其進行管理,主要有以下兩點:
- 每天定時重啟,初步定為凌晨0點
- 10分鐘掃描一次tomcat程序,發現掛掉了立即重啟
5、檢視層詳細設計
5.1 開發工具與框架
Hbuilder開發平臺, mui框架,jQuery框架
5.2 開發流程
- 頁面設計
- 靜態頁面 -- 根據畫好的頁面效果圖,寫出靜態頁面,以及部分按鈕的實現。注意 css的編寫 及 後期 頁面 之間引數的傳遞。
- 資料解析 -- 從後臺人員處獲取介面,然後js中通過jQuery.ajax({})呼叫介面,通過固定引數測試是否能獲取到資料,注意遮罩及回撥函式。
- 資料渲染 -- 根據獲取的資料型別,往頁面填充資料。通過js便利填充 或者用 mui內部外掛引入angular.min.js,通過 $scope賦值。
6、總結
使用爬蟲在獲取資料過程中確實提供了方便,在第三方不提供介面的情況下,使用網路爬蟲是一種很好的資料獲取機制。網路網蟲的好處大致有以下幾點:
- 準確定位,資料獲取方便
- 資料篩選,精煉海量資訊
- 資料庫角色扮演者
但是網路爬蟲也存在不少缺點,我們在開發過程中發現使用網路爬蟲其實還是存在很多短板的,不足之處如下:
- 不規則網頁處理,頁面結構混亂導致爬蟲程式碼冗餘
- 反爬策略,網站反爬策略導致爬取資料失敗
- 動態載入網站,抓取動態載入的資料,需要分析大量的原始檔
- 大規模,海量資料計算能力與記憶體容量無法形成正比
吉林專案最初使用爬蟲的方式獲取資料,在測試過程中發現數據載入較慢,對於實時抓取的資料顯示的尤為突出。目前該專案已調整開發,計劃使用介面的形式從第三方來進行資料的獲得。
相關推薦
網路爬蟲詳細設計方案
目錄 2.1 下載 2.2 分析 6、總結 網路爬蟲設計方案 1、網路爬蟲簡介 網頁爬蟲,是一種按照一定的規則,自動地抓取全球資訊網資訊的程式或者指令碼;其使用場景極其廣泛,各大搜索引
網路爬蟲框架設計與實現
引題 最近在看go語言的程式設計實現,裡面有這個專案,感覺不錯,在這裡簡 要總結和學習心得,給大家一個引路,如果想要具體瞭解可以看《GO 語言併發實踐》 專案介紹 網
製作網路爬蟲中遇到的諸多問題及解決方案
def getsourse(self,url): html=requests.get(url) html.encoding='utf-8' return html.text 關於html檔案轉text格式因為uft-8而出現亂碼的問
iOS應用架構談 網路層設計方案
前言 網路層在一個App中也是一個不可缺少的部分,工程師們在網路層能夠發揮的空間也比較大。另外,蘋果對網路請求部分已經做了很好的封裝,業界的AFNetworking也被廣泛使用。其它的ASIHttpRequest,MKNetworkKit啥的其實也都還不錯,但前者已經棄
iOS應用架構談(3):網路層設計方案
前言 網路層在一個App中也是一個不可缺少的部分,工程師們在網路層能夠發揮的空間也比較大。另外,蘋果對網路請求部分已經做了很好的封裝,業界的AFNetworking也被廣泛使用。其它的ASIHttpRequest,MKNetworkKit啥的其實也都還不錯,但前者已經棄坑,後者
端動態化方案詳細設計
前言 背景什麼的就不說了,大家都懂!不懂的請百度!既然看到了這篇文章,說明你還是對動態化有自己的訴求噠,那麼希望文章中的內容可以幫到你。 技術選型 技術選型永遠是專案確定之後遇到的第一個難題,市面上可以解決專案問題的選型有很多,到底是時髦驅動開發還是熱鬧驅動開發嘞?其實大家在選型過程中最應該關心的不
基於Hadoop開發網路雲盤系統架構設計方案第一稿
引言 雲端計算技術的發展,各種網路雲盤技術如雨後春筍,層出不窮,百度、新浪、網易都推出了自己的雲盤系統,本文基於開源框架Hadoop設計實現了一套自己的網路雲盤系統,方案為初步設計方案,不斷完善中。 一、總體架構 二、方案說明 2.1 系統切分 從使用者角度,整個系統劃分為ECDisk客戶端、EC
幀同步--競技類網路遊戲設計方案
一、 前言 幀同步,根據wiki百科的定義是,一種對同步源進行畫素級同步顯示的處理技術,對於網路上的多個接入者,一個訊號將會通過主機同步傳送給其他人,並同步顯示在各個終端上。同步訊號可以是每幀的畫素資料,也可以是影響資料變化的關鍵事件資訊。 幀同步在網路遊戲中的應用,
網路爬蟲設計中需要注意的幾個問題
做網路爬蟲是件很有意義的事情。首先,它可以是一個專門的職業。從公司層面講,業務和戰略可能都需要很多資料進行多維度分析,所以現在很多公司都有專門的爬蟲工程師負責設計資料採集系統;其次,很多公司以爬蟲為生,爬蟲就是他們用來賺取利潤的最主要手段,比如說各大搜索引擎和最近比較流行的即刻 APP;最後,爬蟲也可以成為程
NIO+reactor模式的網路伺服器設計方案
NIO+reactor 模式的網路伺服器設計方案 1、前言 在前一篇文章中,介紹了基於 BlockingIO +thread-per-connection 的方案,由於該方案為每一個連線分配一個執行緒,而執行緒裡的大部分操作都是阻塞式的,所以在高併發的情況下,會導致產生大量的執行緒
網路爬蟲設計中需要注意的幾個問題us時時彩原始碼五合一盤口藍色版本 親測功能完美運營版
我是通過看「靜覓」上的文章接觸爬蟲的。作者最近還寫了本書「Python3網路爬蟲開發實戰 」,算是現在市面上比較系統的爬蟲書籍了。我也寫點東西總結一下做爬蟲過程中遇到的主要問題,希望對沒有接觸過的同學有參考意義,也希望老鳥們幫忙看看路子是否正確。本文主要是為了釐清爬蟲執行的思路,不會涉及太多的具體程式碼。「網
抄答案就是了,兩套詳細的設計方案,解決頭疼的支付掉單問題
Hello,大家好,我是樓下小黑哥~ 好久沒寫支付相關的文章了,今天繼續從事老本行~ 上次在文章[錢被扣走了,但是訂單卻未成功!支付掉單異常最全解決方案](https://studyidea.cn/drop-order.html)提到,支付過程會出現**掉單、卡單**的情況,這種情況對於使用者來講,體驗非
CloudStack+XenServer詳細部署方案 交換機配置和服務器連線
cloudstack+xenserver詳細部署方案CloudStack+XenServer詳細部署方案(2):交換機配置和服務器連線 本文將根據設計文檔, 對交換機進行配置和服務器網絡連線方式進行說明.Step1.交換機規劃, 根據功能將交換機端口分為三個部分:管理區域(交換機1 – 16 口): 用於
CloudStack+XenServer詳細部署方案 CloudStack管理節點的安裝和配置
cloudstack+xenserver詳細部署方案 cloudstack管理節點的安裝和配置CloudStack+XenServer詳細部署方案 CloudStack管理節點的安裝和配置本文將根據設計文檔, 安裝和配置CloudStack管理節點。本文只對配置流程和結果進行舉例說明, 具體 細節和配置操作請
CloudStack+XenServer詳細部署方案創建高級網絡資源域
cloudstack+xenserver詳細部署方案(5):創建高級網絡資源域CloudStack+XenServer詳細部署方案(5):創建高級網絡資源域本文將根據設計文檔結合和之前創建的XenServer 資源池, 介紹CloudStack高級網絡資源域的創建過程。Step1. 選擇高級網絡模式, 單擊下
計蒜課/ 微軟大樓設計方案/中等(xjb)
得到 con 設計 bre nan lan http pen 情況 題目鏈接:https://nanti.jisuanke.com/t/15772 題意:中文題誒~ 思路:對於坐標為p1(x1, y1), p2(x2, y2) 的兩個核心, 其中 x1 <=
微軟大樓設計方案
use fin pri ons 限制 name 一次 eset open 微軟大樓設計方案(困難) 近日,微軟新大樓的設計方案正在廣泛征集中,其中一種方案格外引人註目。在這個方案中,大樓由 nn 棟樓組成,這些樓從左至右連成一排,編號依次為 11 到 nn,其中第 i
OA系統權限管理設計方案
itl group 權限列表 con 簡化 項目代碼 -s 當前 rtm (轉)OA系統權限管理設計方案 OA系統權限管理設計方案 不同職責的人員,對於系統操作的權限應該是不同的。優秀的業務系統,這是最基本的功能。 可以對“組&rd
小程序公眾號直播系統優化設計方案
小程序公眾號直播 小程序公眾號直播售貨開發技術 小程序企業直播售貨開發、共享鏈小程序系統開發、微商三級分銷管理開發、掃碼查價格查防偽開發,請咨詢:電13809776917 微15820335709 小程序公眾號直播最近很火爆,可以看出能給企業帶來了商機,也能給消費者帶來了便利
[收集] 各式各樣的 無限級分類 的數據庫設計方案
where 數據庫 位數 sel 其中 三級 mat sco tiny 第一種方案: 表為兩張,一張分類表,一張信息表。 表1: `ID` int(10), `cID` tinyint(3) , `title` varchar(255), 表2:`cID` tinyint(