最近園子裏網絡爬蟲很火爆,從 PHP 到 Python,從 windows服務 到 winform 程序,各路大神各顯神通。小弟也獻下醜,從平庸流出發,簡述下 WebApi +AngularJS 方式實現網絡爬蟲。html
AngularJS,建立SPA(單頁面應用)。爬蟲須要長時間的等待服務器返回結果,必須使用ajax實現,使用JQuery同樣能夠作到。前端
WebApi。AngularJS 配合 WebApi 使用十分融洽。git
a. Abp,最近園子裏很火的基礎框架,最大的優勢是分模塊的實現,包括 AppService(WebApi) 層的分模塊,使用後,代碼結構很是清晰。詳細內容能夠見 基於DDD的現代ASP.NET開發框架--ABP系列文章總目錄github
b. 蘇飛論壇的C#HttpHelper萬能框架,用於Html頁面的採集,能夠直接使用『HTTP代理』讀取,這點很重要!ajax
須要注意的一點是,這個框架不是免費的,須要成爲年費會員才能夠下載。windows
c. Ivony的Jumony庫,項目介紹:「Jumony Core首先提供了一個近乎完美的HTML解析引擎,其解析結果無限逼近瀏覽器的解析結果。支持CSS3選擇器。」後端
這個百度就行,能夠搜索到一大堆的提供 Http 代理網址的網站,首先將這些免費的Http代理抓取大本身的代理庫,第二步和第三步須要用到這些代理。使用時,要記錄代理的可用狀況,設定策略,失敗次數過多時,剔除掉。
瀏覽器
固然,土豪直接購買收費的代理便可,穩定性高。服務器
下面是我抓取的代理列表:網絡
被禁的代理(我設定策略是失敗次數大於成功次數3次,即拋棄):
有了足夠的Http代理列表後,就能夠抓取網頁了。
後端實現功能:使用 HttpHelper 掛代理抓取網頁,而後使用 Jumony 分析頁面內容。同時要記錄每一個 Http 代理的成功/失敗狀況。
前端控制流程:根據 WebApi 返回的結果,判斷是否抓取成功。若是成功,繼續下一個頁面的抓取;若是失敗,換個代理繼續抓取當前頁。
因爲文章列表不會太多,用單線程抓取足夠了。
上圖:
經過第二步抓取到了大量未讀取內容的文章後,這時候就須要抓取文章內容了。因爲量比較大,經過多線程實現。
所謂的多線程,就是經過 Ajax 同時調用多個 WebApi 進程,經過監控返回結果。
上圖:
點擊『開始讀取』後
點擊『中止讀取』後:
沒有用到什麼高深的知識,高深的部分都被 AngularJS、Abp、HttpHelper、Jomony實現,所以是平庸技術流的實現。
以上。