亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Web在線爬蟲的設(shè)計(jì)與實(shí)現(xiàn)

        2018-10-19 03:55:48韓前進(jìn)
        軟件 2018年9期
        關(guān)鍵詞:選擇器爬蟲調(diào)用

        韓前進(jìn)

        ?

        Web在線爬蟲的設(shè)計(jì)與實(shí)現(xiàn)

        韓前進(jìn)

        (石河子大學(xué) 信息科學(xué)與技術(shù)學(xué)院,新疆 石河子 832000)

        為了方便用戶簡單高效的獲取互聯(lián)網(wǎng)數(shù)據(jù),提出一種結(jié)合Web技術(shù)與爬蟲技術(shù)的在線輕量級網(wǎng)絡(luò)爬蟲。該爬蟲可在Web頁面上進(jìn)行配置,用戶提交配置到遠(yuǎn)程服務(wù)器,服務(wù)器端爬蟲程序進(jìn)行數(shù)據(jù)抓取分析,最后由Web應(yīng)用將結(jié)果返回到頁面進(jìn)行預(yù)覽,同時(shí)支持生成數(shù)據(jù)結(jié)果接口URL,方便用戶調(diào)用服務(wù)器上爬蟲程序爬到的數(shù)據(jù)。

        網(wǎng)絡(luò)爬蟲;搜索引擎;Web技術(shù)

        0 引言

        隨著信息社會(huì)的飛速發(fā)展,互聯(lián)網(wǎng)已經(jīng)達(dá)到了一個(gè)空前的規(guī)模。網(wǎng)絡(luò)爬蟲作為分析互聯(lián)網(wǎng)有效數(shù)據(jù)的得力工具,同樣也在不停發(fā)展。

        以往用戶想要采集獲得互聯(lián)網(wǎng)數(shù)據(jù),要么尋找開源的爬蟲,要么自己寫爬蟲,再或者花錢請專業(yè)公司進(jìn)行數(shù)據(jù)采集。無論是選擇尋找開源的爬蟲還是自己寫爬蟲程序,都需要進(jìn)行安裝軟件,配置環(huán)境,安裝依賴,學(xué)習(xí)使用等一系列步驟,對有基礎(chǔ)的用戶來說,這沒什么大不了,但對于沒有基礎(chǔ)的用戶來說,這無疑是一道坎。選擇自己寫爬蟲程序時(shí),還需要耗費(fèi)大量時(shí)間與精力去編寫代碼與調(diào)試代碼。花錢請專門的公司進(jìn)行數(shù)據(jù)采集,除了增加開銷之外,還可能面臨數(shù)據(jù)時(shí)效性低的問題。

        Web在線爬蟲以期方便用戶簡單高效獲得互聯(lián)網(wǎng)數(shù)據(jù)。它結(jié)合了Web技術(shù)與爬蟲技術(shù)。用戶只需要安裝一個(gè)瀏覽器,在配置頁提交相關(guān)數(shù)據(jù),即可調(diào)用服務(wù)器上的爬蟲程序。用戶通過Web應(yīng)用提供的配置面板,將必要配置提交到服務(wù)器,服務(wù)器爬蟲程序根據(jù)配置進(jìn)行數(shù)據(jù)請求處理,最后將結(jié)果返回。用戶在登錄的情況下可根據(jù)數(shù)據(jù)抓取結(jié)果選擇生成數(shù)據(jù)接口URL,用戶在自己的程序中請求數(shù)據(jù)接口URL得到數(shù)據(jù),將獲得的數(shù)據(jù)構(gòu)造到自己的應(yīng)用場景中。

        本文將對Web在線爬蟲實(shí)現(xiàn)的實(shí)現(xiàn)原理、抓取策略、工作流程等進(jìn)行分析介紹。

        1 Web在線爬蟲原理

        1.1 Web在線爬蟲實(shí)現(xiàn)原理簡述

        動(dòng)態(tài)網(wǎng)站中相似網(wǎng)頁的網(wǎng)頁結(jié)構(gòu)都是有規(guī)律的。以京東為例,京東網(wǎng)站的每個(gè)產(chǎn)品詳情頁中,分析頁面結(jié)構(gòu),可以看到產(chǎn)品名稱的類名為sku- name。那么,如果想獲得該產(chǎn)品的相關(guān)數(shù)據(jù),用戶只需給出目標(biāo)網(wǎng)址,目標(biāo)網(wǎng)頁中數(shù)據(jù)所在的標(biāo)簽,使用標(biāo)簽選擇器與屬性選擇器就可以得到該類名標(biāo)簽中的數(shù)據(jù)。根據(jù)這個(gè)特點(diǎn),可以設(shè)計(jì)讓用戶自行觀察網(wǎng)頁結(jié)構(gòu),提供標(biāo)簽選擇器與屬性選擇器,指定目標(biāo)網(wǎng)頁URL即可讓爬蟲抓取數(shù)據(jù)。

        Web在線爬蟲主要分為Web應(yīng)用與爬蟲程序兩大模塊。

        Web應(yīng)用是用戶與爬蟲程序之間“聯(lián)絡(luò)人”,負(fù)責(zé)中轉(zhuǎn)用戶調(diào)用爬蟲的請求與返回爬蟲處理后的數(shù)據(jù)結(jié)果。

        爬蟲基于Node.js平臺[1],使用Superagent請求初始頁面URL,獲得整個(gè)網(wǎng)頁,使用Cheerio根據(jù)用戶配置中的標(biāo)簽選擇器與屬性選擇器分析頁面,得到目標(biāo)數(shù)據(jù)。

        為了滿足用戶調(diào)用爬蟲爬到的數(shù)據(jù)的需求,Web在線爬蟲支持生成數(shù)據(jù)接口,這是一個(gè)返回爬蟲爬取數(shù)據(jù)的URL。Web應(yīng)用負(fù)責(zé)與數(shù)據(jù)庫交互,數(shù)據(jù)庫保存用戶的爬蟲配置。生成數(shù)據(jù)接口時(shí),將爬蟲配置寫入數(shù)據(jù)庫,請求數(shù)據(jù)接口時(shí),從數(shù)據(jù)庫獲得配置,將配置設(shè)置到爬蟲中進(jìn)行爬取數(shù)據(jù)。為了提高響應(yīng)速度,可以將爬蟲爬取結(jié)果保存到數(shù)據(jù)庫中,設(shè)置定時(shí)任務(wù),定時(shí)調(diào)用爬蟲程序爬取數(shù)據(jù),更新數(shù)據(jù)庫。當(dāng)用戶請求數(shù)據(jù)接口,直接從數(shù)據(jù)庫取出數(shù)據(jù)進(jìn)行響應(yīng)。

        1.2 Web在線爬蟲的結(jié)構(gòu)

        Web在線爬蟲運(yùn)行結(jié)構(gòu)如圖1所示。它分為用戶、Web應(yīng)用、爬蟲程序與互聯(lián)網(wǎng)四大模塊。用戶發(fā)起調(diào)用爬蟲請求,Web應(yīng)用接受請求并調(diào)用爬蟲程序,爬蟲向互聯(lián)網(wǎng)發(fā)起請求,處理分析得到的數(shù)據(jù)之后,將結(jié)果遞交Web應(yīng)用,Web應(yīng)用將結(jié)果反饋給用戶。

        圖1 Web在線爬蟲運(yùn)行結(jié)構(gòu)

        1.3 爬蟲程序爬取過程

        爬蟲程序獲得目標(biāo)數(shù)據(jù)的過程如圖2所示。從一個(gè)或若干初始網(wǎng)頁的URL開始,獲得初始網(wǎng)頁上的URL,在抓取網(wǎng)頁的過程中,不斷從當(dāng)前頁面上抽取新的URL放入隊(duì)列,直到滿足停止條件。

        圖2 爬蟲獲得目標(biāo)數(shù)據(jù)的過程

        1.4 爬蟲程序獲得中間URL

        爬蟲獲得中間URL過程如圖3所示,用戶需要提供初始頁面到目標(biāo)頁面的每一級a標(biāo)簽位置,以使得爬蟲程序順利找到目標(biāo)頁面。在目標(biāo)頁面,用戶需要提供標(biāo)簽選擇器與屬性選擇器以使得爬蟲獲得目標(biāo)數(shù)據(jù)。

        2 爬蟲抓取策略

        遍歷策略[2]是爬蟲的核心問題。在爬蟲系統(tǒng)中,待抓取URL隊(duì)列是很重要的一部分。待抓取URL隊(duì)列中的URL以什么樣的順序排列也是一個(gè)很重要的問題,因?yàn)檫@涉及到先抓取哪個(gè)頁面,后抓取哪個(gè)頁面。決定這些URL排列順序的方法,叫做抓取策略。

        爬蟲策略主要有以下幾種:

        (1)深度優(yōu)先遍歷策略:

        深度優(yōu)先遍歷測試是指網(wǎng)絡(luò)爬蟲會(huì)從起始頁開始,一個(gè)鏈接一個(gè)鏈接跟蹤下去,處理完這條線路的鏈接之后,在再轉(zhuǎn)入下一個(gè)起始頁,繼續(xù)跟蹤鏈接。

        圖3 爬蟲獲取中間URL的過程

        深度優(yōu)先策略不一定能適用于所有情況,深度優(yōu)先如果誤入無窮分枝(深度無限),則不可能找到目標(biāo)節(jié)點(diǎn)

        (2)廣度優(yōu)先策略

        廣度優(yōu)先策略是按照樹的層次進(jìn)行搜索,如果此層沒有搜索完成,不會(huì)進(jìn)入下一層搜索。即,首先完成一個(gè)層次的搜索,其次在進(jìn)行下一層次,也稱之為分層處理。

        廣度優(yōu)先遍歷策略屬于盲目搜索,它并不考慮結(jié)果存在的可能位置,會(huì)徹底地搜索整張圖,因而效率較低,但是,如果盡可能的覆蓋較多的網(wǎng)頁,廣度優(yōu)先搜索方法是較好的選擇。

        (3)部分的PageRank的策略

        對于已經(jīng)下載的網(wǎng)頁,連同待抓取URL隊(duì)列的URL,形成網(wǎng)頁集合,計(jì)算每個(gè)頁面的PageRank值,計(jì)算完之后,將待抓取隊(duì)列中的URL按照網(wǎng)頁級別的值的大小排列,并按照順序依次抓取網(wǎng)址頁面。

        (4)OPIC(在線頁面重要性計(jì)算)策略:

        在算法開始前,給所有頁面一個(gè)相同的初始現(xiàn)金,當(dāng)下載了某個(gè)頁面P之后,將P的現(xiàn)金分?jǐn)偨o所有從P中分析出的鏈接,并且將P的現(xiàn)金清空。對于待抓取URL隊(duì)列中的所有頁面按照現(xiàn)金數(shù)進(jìn)行排序。

        OPIC與PageRank的區(qū)別在于:PageRank的的的每次需要迭代計(jì)算,而OPIC策略不需要迭代過程所以計(jì)算速度遠(yuǎn)遠(yuǎn)快與PageRank的的的,適合實(shí)時(shí)計(jì)算使用。

        Web在線爬蟲系統(tǒng)采用廣度優(yōu)先搜索算法,用戶在提供的配置面板中配置從初始頁面到目標(biāo)頁面搜索路徑,有效避免了廣度優(yōu)先搜索的盲目搜索問題。

        廣度優(yōu)先搜索是一種簡單直觀且歷史悠久的遍歷方法。Web在線爬蟲通過一個(gè)或一組URL為初始頁面,通過用戶指出的每層的URL(用戶給出a標(biāo)簽選擇器,利用cheerio分析HTML標(biāo)簽即可獲取URL),逐層向下請求分析搜索,直到得到目標(biāo)數(shù)據(jù)。

        爬蟲的廣度優(yōu)先搜索路徑如圖4所示,程序首先會(huì)從初始頁面中分析獲得所有到目標(biāo)頁面的一級URL,然后依次請求一級URL,得到網(wǎng)頁數(shù)據(jù),進(jìn)行分析之后,再得到二級URL,再進(jìn)行請求分析...請求分析到目標(biāo)頁面停止,此時(shí)在目標(biāo)頁面運(yùn)用標(biāo)簽選擇器與屬性選擇器即可獲得目標(biāo)數(shù)據(jù)。

        圖4 爬蟲的廣度優(yōu)先搜索路徑

        3 Web在線爬蟲的工作流程

        (1)用戶發(fā)起URL請求,Web應(yīng)用響應(yīng)Web在線爬蟲配置面板

        (2)用戶提交爬蟲配置,Web應(yīng)用將配置遞交爬蟲程序

        (3)爬蟲程序根據(jù)遞交的配置,進(jìn)行數(shù)據(jù)請求,處理分析,最后將處理結(jié)果遞交Web應(yīng)用

        (4)Web應(yīng)用將結(jié)果返回用戶

        (5)數(shù)據(jù)符合用戶需求,用戶發(fā)起生成數(shù)據(jù)接口請求

        (6)Web應(yīng)用判斷用戶是否登錄,如果登錄,數(shù)據(jù)庫保存用戶提交的爬蟲配置,與數(shù)據(jù)處理結(jié)果,如果沒有登錄,返回登錄提示。

        (7)程序定時(shí)請求從數(shù)據(jù)庫獲得爬蟲配置,調(diào)用爬蟲程序,獲得結(jié)果數(shù)據(jù)后,更新數(shù)據(jù)庫中結(jié)果數(shù)據(jù),保持?jǐn)?shù)據(jù)庫數(shù)據(jù)“新鮮”

        (8)用戶調(diào)用數(shù)據(jù)接口,Web應(yīng)用取出數(shù)據(jù)庫數(shù)據(jù)進(jìn)行響應(yīng)

        4 Web在線爬蟲實(shí)現(xiàn)

        4.1 技術(shù)儲備

        Web在線爬蟲后端采用Node.js平臺,原因是Node.js輕量,生態(tài)豐富。前端使用Vue框架進(jìn)行頁面搭建。

        采用Koa.js[3]Web開發(fā)框架。它具有輕量、表現(xiàn)力豐富、健壯的特點(diǎn)。

        采用Superagent[4]請求庫。這是一個(gè)輕量的、漸進(jìn)式的Ajax API,是Node.js里一個(gè)非常方便的客戶端請求代理模塊,可讀性較好。

        采用Cheerio[5]。這是一個(gè)Node.js的抓取頁面模塊,是為服務(wù)器特別定制的,快速、靈活、實(shí)施的jQuery核心實(shí)現(xiàn)。適合各種Web爬蟲程序。

        采用Async[6]。這是一個(gè)流程控制工具包,提供了直接而強(qiáng)大的異步功能?;贘avaScript為Node.js設(shè)計(jì),同時(shí)也可以直接在瀏覽器中使用。

        采用MongoDB[7]。這是一個(gè)基于分布式文件存儲的數(shù)據(jù)庫。它支持的數(shù)據(jù)結(jié)構(gòu)非常松散,是類似JSON的BSON格式。這種文檔結(jié)構(gòu)的存儲方式,使用戶能夠更便捷的獲取數(shù)據(jù)。

        采用Vue.js[8]前端框架。這是一套用于構(gòu)建用戶界面的漸進(jìn)式框架。

        4.2 在線爬蟲具體實(shí)現(xiàn)

        (1)使用Koa.js Web開發(fā)框架,搭建Web應(yīng)用。

        (2)編寫Web前端頁面,負(fù)責(zé)用戶填寫提交爬蟲配置。爬蟲基本配置項(xiàng)有:1)初始頁面URL。2)初始頁面到中間頁面n中每一級的a標(biāo)簽選擇器。3)目標(biāo)頁面目標(biāo)數(shù)據(jù)的標(biāo)簽選擇器與屬性選擇器。

        (3)將Web頁面配置提供的a標(biāo)簽選擇器壓入隊(duì)列。

        (4)編寫爬蟲程序。Superagent請求庫請求初始頁面URL,根據(jù)用戶提供的a標(biāo)簽選擇器,使用Cheerio分析獲得下一級頁面的URL,將所有獲得到的URL壓入隊(duì)列,遞歸調(diào)用Superagent,直到a標(biāo)簽選擇器隊(duì)列里,所有標(biāo)簽都分析完。此時(shí),分析到目標(biāo)頁面,根據(jù)標(biāo)簽選擇器與屬性選擇器,得到目標(biāo)數(shù)據(jù)。

        (5)將爬蟲得到的數(shù)據(jù)存入數(shù)組,由Web應(yīng)用返回給用戶。

        (6)為了增強(qiáng)爬取效率,使用Async異步請求庫,進(jìn)行并發(fā)請求。

        (7)為了防止被目標(biāo)服務(wù)器發(fā)現(xiàn)爬蟲爬取數(shù)據(jù)。為Superagent設(shè)置請求頭,使用HTTP代理池,代理訪問請求。

        (8)調(diào)用數(shù)據(jù)接口時(shí),Web應(yīng)用從數(shù)據(jù)庫查找用戶配置,再調(diào)用爬蟲抓取數(shù)據(jù),最后再返回結(jié)果。當(dāng)調(diào)用數(shù)據(jù)接口頻率過大時(shí),會(huì)對服務(wù)器造成不小的壓力。因此,將爬蟲爬取的結(jié)果存入數(shù)據(jù)庫,設(shè)置定時(shí)任務(wù),定時(shí)調(diào)用爬蟲程序,更新數(shù)據(jù)庫中爬蟲爬取的結(jié)果。當(dāng)請求數(shù)據(jù)接口時(shí),直接從數(shù)據(jù)庫中找到數(shù)據(jù),返回結(jié)果。

        5 爬蟲核心代碼

        5.1 爬蟲主函數(shù)

        //爬蟲主函數(shù),根據(jù)a標(biāo)簽選擇器,得到下一級URL

        function splider(urls) {

        return new Promise((resolve, reject) => {

        //async流程控制庫,控制并發(fā)請求數(shù)量為5

        async.mapLimit(urls, 5, function(url, callback) {

        //superagent請求url

        superagent.get(url).end(function(err, res) {

        //服務(wù)器響應(yīng)錯(cuò)誤,或網(wǎng)絡(luò)錯(cuò)誤

        if (err) {

        reject(err);

        }

        //保存結(jié)果

        var allurls = [];

        //將服務(wù)器響應(yīng)內(nèi)容載入Cheerio

        var $ = cheerio.load(res. text);

        //分析過濾

        $('#list a').each(function(idx, element) {

        var $element = $(element);

        var href = url.resolve (url, $element.attr('href'));

        allurls.push(href);

        });

        //調(diào)用回調(diào)函數(shù),將局部結(jié)果傳遞到回調(diào)函數(shù)中保存,回調(diào)函數(shù)內(nèi)部將局部結(jié)果拼接。

        callback(null, allurls)

        }, function(err, result) {

        if (err) reject(err);

        //函數(shù)執(zhí)行完畢,將結(jié)果 返回

        resolve(result);

        })

        })

        })

        }

        5.2 Web應(yīng)用響應(yīng)函數(shù)

        //Koa.js處理Web請求

        app.use(async function(ctx, next) {

        //用戶以get方式,請求/result路徑

        if (ctx.request.path === "/result" && ctx.request.method === "GET") {

        //請求參數(shù)(內(nèi)含爬蟲配置參數(shù))

        const body = ctx.request.query;

        try {

        //響應(yīng)用戶爬蟲的爬取結(jié)果

        ctx.response.body = await splider (body.targetUrl);

        } catch (e) {

        //爬蟲響應(yīng)失敗,返回錯(cuò)誤提示

        ctx.response.body = "Something was wrong " + e;

        }

        } else {

        await next();

        }

        });

        6 Web在線爬蟲使用實(shí)例

        爬取目標(biāo):豆瓣電影排行榜中每部電影的詳細(xì)信息。

        豆瓣電影排行榜如圖5所示。

        豆瓣電影的電影詳情頁如圖6所示。

        爬蟲配置頁面如圖7所示。配置頁中爬取深度指出初始頁面到目標(biāo)頁面之間有幾層,目標(biāo)網(wǎng)址即初始頁面URL,1級選擇器是初始頁面到目標(biāo)頁面的a標(biāo)簽選擇器,2級選擇器則為數(shù)據(jù)所在的普通選擇器,輸出結(jié)果格式中保存數(shù)據(jù)的屬性選擇器。

        圖5 豆瓣電影排行榜(部分)

        圖6 豆瓣電影的電影詳情頁

        圖7 在線爬蟲配置頁面

        請求數(shù)據(jù)接口響應(yīng)的爬蟲爬取結(jié)果如圖8所示。

        圖8 數(shù)據(jù)接口響應(yīng)的數(shù)據(jù)

        7 數(shù)據(jù)接口調(diào)用

        7.1 數(shù)據(jù)接口

        數(shù)據(jù)接口實(shí)例:http://www.domain.com/inter-face?name=tom&cid=123456

        鏈接參數(shù)說明:

        name參數(shù)指注冊用戶用戶名。只有注冊用戶才能生成數(shù)據(jù)接口。

        cid參數(shù)指當(dāng)前用戶的爬蟲配置參數(shù)id,每個(gè)cid對應(yīng)數(shù)據(jù)庫中一個(gè)爬蟲配置。

        7.2 Java調(diào)用實(shí)例[9]

        public static String sendGet(String url, String param) {

        String result = "";

        BufferedReader in = null;

        try {

        String urlNameString = url + "?" + param;

        URL realUrl = new URL(url-Na-me-String);

        // 打開和URL之間的連接

        URLConnection connection = realUrl.openConnection();

        // 設(shè)置通用的請求屬性

        connection.setRequestProperty("accept", "*/*");

        connection.setRequestProperty("connection", "Keep-Alive");

        connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");

        // 建立實(shí)際的連接

        connection.connect();

        // 獲取所有響應(yīng)頭字段

        Map> map = connection.getHeaderFields();

        // 遍歷所有的響應(yīng)頭字段

        for (String key : map.keySet()) {

        System.out.println(key + "--->" + map.get(key));

        }

        // 定義 BufferedReader輸入流來讀取URL的響應(yīng)

        in = new BufferedReader(new InputStreamReader(connection.getInputStream()));

        String line;

        while ((line = in.readLine()) != null) {

        result += line;

        }

        } catch (Exception e) {

        System.out.println("發(fā)送GET請求出現(xiàn)異常!" + e);

        e.printStackTrace();

        }

        // 使用finally塊來關(guān)閉輸入流

        finally {

        try {

        if (in != null) {

        in.close();

        }

        } catch (Exception e2) {

        e2.printStackTrace();

        }

        }

        return result;

        }

        sendGet(‘http://www.domain.com/interface’,’name=tom&cid=123456’);

        7.3 PHP調(diào)用實(shí)例[10]

        function do_get($url, $params) {

        $url = "{$url}?".http_build_query($params);

        $ch = curl_init();

        curl_setopt($ch, CURLOPT_URL, $url);

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');

        curl_setopt($ch, CURLOPT_TIMEOUT, 60);

        curl_setopt($ch, CURLOPT_POSTFIELDS, $params);

        $result = curl_exec($ch);

        curl_close($ch);

        return $result;

        }

        do_get("http://www.domain.com/interface", array('name' => 'tom','cid'=>'12345'));

        7.4 Node.js調(diào)用實(shí)例

        const request = require('request');

        request('http://www.domain.com/interface?name= tom&cid=123456',function(error,response, body) {

        if (!error && response.statusCode == 200) {

        console.log(body)

        }

        })

        8 結(jié)語

        本文介紹了Web在線網(wǎng)絡(luò)爬蟲設(shè)計(jì)與實(shí)現(xiàn),對在線爬蟲原理進(jìn)行了簡要分析,并重點(diǎn)對爬蟲實(shí)現(xiàn)的關(guān)鍵技術(shù)進(jìn)行了講解與實(shí)現(xiàn)。雖然市面上爬蟲技術(shù)的數(shù)據(jù)采集系統(tǒng)有很多,但基本都需要進(jìn)行安裝軟件、配置環(huán)境等一系列的過程,如果沒有合適的爬蟲程序,則還需要程序員手動(dòng)編寫代碼實(shí)現(xiàn)自己的爬蟲,而這期間,耗費(fèi)的時(shí)間與精力不言而喻。Web在線爬蟲簡化了過程,只需要在Web頁面上進(jìn)行簡單的配置,就可以利用服務(wù)器上的爬蟲程序,獲得爬取的數(shù)據(jù)結(jié)果。選擇生成數(shù)據(jù)接口之后,用戶在自己的程序中,利用HTTP請求庫,請求數(shù)據(jù)接口獲得數(shù)據(jù),將數(shù)據(jù)構(gòu)造到自己的程序即可。這大大方便了用戶獲取互聯(lián)網(wǎng)上的數(shù)據(jù)。

        沒有一種爬蟲程序適用所有應(yīng)用場景。同樣,對于Web在線爬蟲來說也是如此,Web在線爬蟲爬取的數(shù)據(jù),是以HTTP報(bào)文的形式在互聯(lián)網(wǎng)上傳輸,當(dāng)Web應(yīng)用響應(yīng)的數(shù)據(jù)量過大,很容易造成響應(yīng)超時(shí)、響應(yīng)中斷的結(jié)果。所以Web在線爬蟲適合爬取傳輸一些數(shù)據(jù)量較小的數(shù)據(jù)。同時(shí)因?yàn)榛ヂ?lián)網(wǎng)數(shù)以億計(jì)的網(wǎng)站中,網(wǎng)頁結(jié)構(gòu)千差萬別,為了滿足爬蟲的通用性,爬蟲并沒有對Ajax動(dòng)態(tài)響應(yīng)的內(nèi)容進(jìn)行解析與處理,所以對于一些使用Ajax動(dòng)態(tài)加載的網(wǎng)頁無能為力。但是,這并不意味著Web在線爬蟲沒有實(shí)用價(jià)值。使用Web在線爬蟲,可以用來監(jiān)控目標(biāo)網(wǎng)站數(shù)據(jù),比如,我想知道北京到西安的某一個(gè)航班在10月的機(jī)票價(jià)格情況,可以使用Web在線爬蟲爬取航空公司網(wǎng)站,生成數(shù)據(jù)接口之后,用戶每天請求數(shù)據(jù)接口,將得到的數(shù)據(jù)保存匯總即可。同樣,還可以用來監(jiān)控自己在購物網(wǎng)站上喜愛的物品降價(jià)沒有,自己追的劇更新沒有等等。

        [1] alsotang. 使用superagent與cheerio完成簡單爬蟲[OL]. (2014-10-27)[2018-07-5]. https://github.com/alsotang/node- lessons/tree/master/lesson3.

        [2] neituime. 網(wǎng)絡(luò)爬蟲基本工作流程和抓取策略[OL]. (2015- 12-08)[2018-07-6]. https://blog.csdn.net/neituime/article/det-ails/50218833.

        [3] StrongLoop. Koa-next generation web framework for node.js [OL]. [2018-07-6]. https://koajs.com.

        [4] visionmedia.SuperAgent-elegant API for AJAX in Node and browsers[OL]. [2018-07-6]. http://visionmedia.github.io/sup-era-gent/.

        [5] cheeriojs. Cheerio[OL](2018-7-7)[2018-7-8]. https://github. com/cheer-iojs/cheerio.

        [6] caolan. async [OL].(2018-5-20) [2018-7-10]. https://caolan. github.io/async/.

        [7] Dwight, Merriman, Eliot, Horowitz, Kevin, Ryan. MongoDB Documentation [OL]. [2018-7-10]. https://docs.mongodb.com/.

        [8] Phan An, defcc, Jinjiang. Vue教程[OL]. [2018-7-10]. https: //cn.vuejs.org/v2/guide/index.html.

        [9] 五指少年. java發(fā)送http請求[OL]. (2016-08-31) [2018- 07-10]. https://www.cnblogs.com/xrab/p/5825105.html.

        [10] 小云云. PHP實(shí)現(xiàn)發(fā)送HTTP請求[OL]. (2018-03-27) [2018- 07-10]. http://www.php.cn/php-weizijiaocheng-390267.html.

        Design and Implementation of Web Online Crawler

        HAN Qian-jin

        (Shihezi University, Shihezi Xinjiang, 832000, China)

        In order to facilitate users to obtain Internet data simply and efficiently, an online lightweight web crawler combining Web technology and crawler technology is proposed. The crawler can be configured on the Web page, the user submits the configuration to the remote server, the server crawler program carries out the data capture and analysis, and finally returns the result to the page for preview by the Web application, and supports the generation of the data result interface URL, which is convenient for the user to call the data crawled by the crawler program on the server.

        Search engines; Web crawler; Web technology

        TP393.092

        A

        10.3969/j.issn.1003-6970.2018.09.018

        韓前進(jìn)(1996-),男,石河子大學(xué)信息科學(xué)與技術(shù)學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)學(xué)生。

        本文著錄格式:韓前進(jìn). Web在線爬蟲的設(shè)計(jì)與實(shí)現(xiàn)[J]. 軟件,2018,39(9):86-92

        猜你喜歡
        選擇器爬蟲調(diào)用
        靶通道選擇器研究與優(yōu)化設(shè)計(jì)
        利用網(wǎng)絡(luò)爬蟲技術(shù)驗(yàn)證房地產(chǎn)灰犀牛之說
        基于Python的網(wǎng)絡(luò)爬蟲和反爬蟲技術(shù)研究
        核電項(xiàng)目物項(xiàng)調(diào)用管理的應(yīng)用研究
        LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
        利用爬蟲技術(shù)的Geo-Gnutel la VANET流量采集
        電子測試(2018年1期)2018-04-18 11:53:04
        四選一數(shù)據(jù)選擇器74LS153級聯(lián)方法分析與研究
        電腦與電信(2017年6期)2017-08-08 02:04:22
        大數(shù)據(jù)環(huán)境下基于python的網(wǎng)絡(luò)爬蟲技術(shù)
        電子制作(2017年9期)2017-04-17 03:00:46
        基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
        雙四選一數(shù)據(jù)選擇器74HC153的級聯(lián)分析及研究
        一本一道人人妻人人妻αv| 亚洲av成人久久精品| 日本本土精品午夜视频| 波多野结衣不打码视频| 把插八插露脸对白内射| 窄裙美女教师在线观看视频| 成人性生交大片免费看激情玛丽莎 | 中文字幕成人精品久久不卡91| 国产精品久久久久久妇女| 亚洲男人的天堂在线aⅴ视频| 欧美精品AⅤ在线视频| 麻豆国产成人av高清在线| 十八禁视频在线观看免费无码无遮挡骂过| 六月婷婷久香在线视频| 无码国产精品一区二区免费网曝| av在线不卡一区二区三区| 本道天堂成在人线av无码免费 | 这里有精品可以观看| 精品久久久亚洲中文字幕| 亚洲中文字幕久久精品色老板| 人与动牲交av免费| 在线观看国产高清免费不卡黄| 亚洲高清国产拍精品熟女| 最新国产不卡在线视频| 日本高清h色视频在线观看| 精品无码AV无码免费专区| 国产色婷亚洲99精品av网站| 亚洲av成人片色在线观看| www国产精品内射熟女| 亚洲中文字幕精品久久久久久直播 | 国产一区二区三区特黄| 久久国产成人精品av| 久久精品国产亚洲精品| 亚洲AV无码一区二区三区精神| 成人av毛片免费大全| 国产人妻精品无码av在线 | 饥渴的熟妇张开腿呻吟视频| 日韩啪啪精品一区二区亚洲av| 日产国产亚洲精品系列| 国产精品成人3p一区二区三区| 四虎影视亚洲精品|