javascript
平庸技术流,用 WebApi +AngularJS 实现网络爬虫
最近園子里網(wǎng)絡(luò)爬蟲很火爆,從?PHP?到?Python,從?windows服務(wù)?到?winform?程序,各路大神各顯神通。小弟也獻(xiàn)下丑,從平庸流出發(fā),簡(jiǎn)述下 WebApi +AngularJS?方式實(shí)現(xiàn)網(wǎng)絡(luò)爬蟲。
一、技術(shù)框架
1.1 前端:
AngularJS,創(chuàng)建SPA(單頁面應(yīng)用)。爬蟲需要長(zhǎng)時(shí)間的等待服務(wù)器返回結(jié)果,必須使用ajax實(shí)現(xiàn),使用JQuery一樣可以做到。
?
1.2 后端:
WebApi。AngularJS 配合 WebApi?使用十分融洽。
?
1.3 后端用到的框架/庫:
a. Abp,最近園子里很火的基礎(chǔ)框架,最大的優(yōu)點(diǎn)是分模塊的實(shí)現(xiàn),包括 AppService(WebApi) 層的分模塊,使用后,代碼結(jié)構(gòu)非常清晰。詳細(xì)內(nèi)容可以見 基于DDD的現(xiàn)代ASP.NET開發(fā)框架--ABP系列文章總目錄
?
b.?蘇飛論壇的C#HttpHelper萬能框架,用于Html頁面的采集,可以直接使用『HTTP代理』讀取,這點(diǎn)很重要!
需要注意的一點(diǎn)是,這個(gè)框架不是免費(fèi)的,需要成為年費(fèi)會(huì)員才可以下載。
?
c. Ivony的Jumony庫,項(xiàng)目介紹:“Jumony Core首先提供了一個(gè)近乎完美的HTML解析引擎,其解析結(jié)果無限逼近瀏覽器的解析結(jié)果。支持CSS3選擇器。”
?
二、技術(shù)實(shí)現(xiàn)
2.1、抓取免費(fèi)的 Http?代理地址。
這個(gè)百度就行,可以搜索到一大堆的提供?Http?代理網(wǎng)址的網(wǎng)站,首先將這些免費(fèi)的Http代理抓取大自己的代理庫,第二步和第三步需要用到這些代理。使用時(shí),要記錄代理的可用情況,設(shè)定策略,失敗次數(shù)過多時(shí),剔除掉。
當(dāng)然,土豪直接購買收費(fèi)的代理即可,穩(wěn)定性高。
下面是我抓取的代理列表:
被禁的代理(我設(shè)定策略是失敗次數(shù)大于成功次數(shù)3次,即拋棄):
?
2.2、讀取文章列表(單線程)
有了足夠的Http代理列表后,就可以抓取網(wǎng)頁了。
后端實(shí)現(xiàn)功能:使用 HttpHelper?掛代理抓取網(wǎng)頁,然后使用 ?Jumony?分析頁面內(nèi)容。同時(shí)要記錄每個(gè)?Http?代理的成功/失敗情況。
前端控制流程:根據(jù) WebApi?返回的結(jié)果,判斷是否抓取成功。如果成功,繼續(xù)下一個(gè)頁面的抓取;如果失敗,換個(gè)代理繼續(xù)抓取當(dāng)前頁。
由于文章列表不會(huì)太多,用單線程抓取足夠了。
上圖:
?
2.3、讀取文章(多線程)
通過第二步抓取到了大量未讀取內(nèi)容的文章后,這時(shí)候就需要抓取文章內(nèi)容了。由于量比較大,通過多線程實(shí)現(xiàn)。
所謂的多線程,就是通過 Ajax?同時(shí)調(diào)用多個(gè)?WebApi?進(jìn)程,通過監(jiān)控返回結(jié)果。
上圖:
點(diǎn)擊『開始讀取』后
?點(diǎn)擊『停止讀取』后:
?
三、后記
沒有用到什么高深的知識(shí),高深的部分都被?AngularJS、Abp、HttpHelper、Jomony實(shí)現(xiàn),因此是平庸技術(shù)流的實(shí)現(xiàn)。
以上。
?
轉(zhuǎn)載于:https://www.cnblogs.com/dusdong/p/4733594.html
總結(jié)
以上是生活随笔為你收集整理的平庸技术流,用 WebApi +AngularJS 实现网络爬虫的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 二胎怎么就是怀不上
- 下一篇: Spring MVC 返回NULL时客户