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

        ?

        基于ScrapySharp的孔夫子舊書網(wǎng)的圖書價(jià)格信息抓取器的實(shí)現(xiàn)

        2017-10-21 00:15:49李金峰郭冰李金隆
        科技信息·中旬刊 2017年7期

        李金峰 郭冰 李金隆

        摘要:ScapySharp由于有一個(gè)瀏覽器包裝類和使用類似jQuery的Css選擇器和Linq語(yǔ)法,使得它使用簡(jiǎn)單,更容易地被用以進(jìn)行Html文檔解析。本文介紹了一種基于ScrapySharp的孔夫子舊書網(wǎng)的圖書價(jià)格信息抓取器及其實(shí)現(xiàn)的思路和關(guān)鍵技術(shù)。

        關(guān)鍵詞:ScapySharp;孔夫子舊書網(wǎng);圖書價(jià)格;信息抓取

        一、引言

        采集電商網(wǎng)的商品價(jià)格信息,對(duì)于網(wǎng)店賣家進(jìn)行同類商品的定價(jià)決策有重要的參考意義。筆者使用ScrapySharp實(shí)現(xiàn)了對(duì)孔夫子舊書網(wǎng)上的圖書的價(jià)格信息進(jìn)行抓取的軟件,該軟件功能可以用在電商系統(tǒng)后臺(tái)等軟件系統(tǒng),為賣家的商品定價(jià)決策提供支持。

        二、軟件功能描述

        賣家在孔夫子舊書網(wǎng)上架舊書商品的時(shí)候,需要確定舊書商品的價(jià)格,而價(jià)格的確定又需要參考同行的圖書商品的定價(jià)。這種情況,一般的做法是通過(guò)圖書的ISBN號(hào)在孔夫子舊書網(wǎng)上搜索圖書的商品信息,然后查看各賣家對(duì)該書的定價(jià),在參考同行定價(jià)的基礎(chǔ)上,確定本店的定價(jià)。通過(guò)ISBN號(hào)在孔夫子舊書網(wǎng)上查詢圖書價(jià)格信息的方法如圖1所示。這種查詢圖書定價(jià)信息的做法的最大缺點(diǎn)是,人力成本高,信息獲取的效率低。

        為了節(jié)約人力成本,提高查詢網(wǎng)店圖書價(jià)格信息的效率,筆者實(shí)現(xiàn)了一種基于ScrapySharp的孔夫子舊書網(wǎng)價(jià)格信息抓取器,用戶只需要輸入圖書的ISBN號(hào),就可以查找到孔夫子網(wǎng)上的該書的所有定價(jià)信息,并把定價(jià)信息顯示在用戶界面。

        三、軟件功能的實(shí)現(xiàn)

        1、軟件功能實(shí)現(xiàn)的思路

        孔夫子舊書網(wǎng)的書籍價(jià)格信息抓取器的實(shí)現(xiàn)思路是,通過(guò)Url定位到圖書查詢的網(wǎng)頁(yè),然后對(duì)網(wǎng)頁(yè)的內(nèi)容進(jìn)行抓取,最后從網(wǎng)頁(yè)內(nèi)容中把圖書的價(jià)格信息提取出來(lái)。軟件功能實(shí)現(xiàn)的思路(價(jià)格信息獲取的流程)如圖2所示。

        2、以ISBN查詢圖書信息的Url分析

        以ISBN為“9787560544588”的圖書為例,該圖書的中文書名為:概率、變量與過(guò)程(第4版);英文書名為:Probability,Random Variables and Stochastic Processes.在孔夫子舊書網(wǎng)的商品搜索框中輸入“9787560544588”后,頁(yè)面呈現(xiàn)搜索結(jié)果——《概率、變量與過(guò)程(第4版)》的商品信息列表,如圖1所示。此時(shí),瀏覽器地址欄中顯示的網(wǎng)址為:http://search.kongfz.com/product/zk39k37k38k37k35k36k30k35k34k34k35k38k38/。

        再通過(guò)其它圖書的ISBN搜索實(shí)驗(yàn)發(fā)現(xiàn),搜索結(jié)果地址的結(jié)構(gòu)分為三部分,第一部分為服務(wù)器(控制器)地址,即:http://search.kongfz.com/product/。第二部分為經(jīng)過(guò)字符串混淆處理的ISBN號(hào),即例子中的網(wǎng)址的“zk39k37k38k37k35k36k30k35k34k34k35k38k38”部分,該部分的結(jié)構(gòu)為:“zk3”+ISBN號(hào)第1位+“k3”+ISBN號(hào)第2位++“k3”+ISBN號(hào)第3位+“k3”+ISBN號(hào)第4位+“k3”+ISBN號(hào)第5位+“k3”+ISBN號(hào)第6位+“k3”+ISBN號(hào)第7位+“k3”+ISBN號(hào)第8位++“k3”+ISBN號(hào)第9位+“k3”+ISBN號(hào)第10位+“k3”+ISBN號(hào)第11位+“k3”+ISBN號(hào)第12位+“k3”+ISBN號(hào)第13位。第三部分為搜索結(jié)果的分頁(yè)頁(yè)碼,由“w+數(shù)字”構(gòu)成,數(shù)字1表示搜索結(jié)果的第一頁(yè),2表示第二頁(yè),以此類推。本例子中,網(wǎng)址可以寫成完整結(jié)構(gòu)(包含服務(wù)器(控制器)地址、ISBN號(hào)信息和搜索結(jié)果分頁(yè)頁(yè)碼三部分)的網(wǎng)址,即:

        http://search.kongfz.com/product/zk39k37k38k37k35k36k30k35k34k34k35k38k38w1/

        通過(guò)實(shí)驗(yàn)發(fā)現(xiàn),當(dāng)輸入的分頁(yè)頁(yè)碼數(shù)大于實(shí)際搜索結(jié)果的分頁(yè)頁(yè)碼時(shí),返回的網(wǎng)頁(yè)中的title標(biāo)簽中的內(nèi)容為“搜索零結(jié)果”,即:

        搜索零結(jié)果

        據(jù)此,可以準(zhǔn)確判斷搜索結(jié)果的分頁(yè)頁(yè)碼數(shù)。

        3、ScrapySharp和Htlm文檔解析

        通過(guò)網(wǎng)頁(yè)搜索實(shí)驗(yàn)發(fā)現(xiàn),圖書價(jià)格信息在Html文檔中的標(biāo)簽節(jié)點(diǎn)為:

        遍歷文檔中的class為“red”的p標(biāo)簽可以獲取當(dāng)前頁(yè)中的所有圖書價(jià)格信息。

        ScrapySharp為.Net開發(fā)者解析Html文檔提供了極大的便利,主要優(yōu)點(diǎn)有:ScapySharp有一個(gè)瀏覽器包裝類(處理Reference,Cookie等),此外,它使用類似jQuery的Css選擇器和Linq語(yǔ)法。通過(guò)ISBN號(hào)獲取孔夫子舊書網(wǎng)中的圖書價(jià)格信息的核心代碼如下:

        public List GetKongfuziPriceByIsbn(string isbn)

        {

        try

        {

        //價(jià)格信息集合

        List priceStrList = new List();

        //搜索結(jié)果分頁(yè)

        int page = 1;

        //讀取所有分頁(yè)的html文檔信息

        while(true)

        {

        //使用WebClient處理從web站點(diǎn)檢索的數(shù)據(jù)

        WebClient client = new WebClient();

        //獲取搜索內(nèi)容為isbn(圖書ISBN號(hào))的搜索結(jié)果網(wǎng)址

        string address = GetSearchUrl(isbn);

        //獲取流

        Stream st = client.OpenRead(address + “w” + page);

        //分頁(yè)頁(yè)碼加1

        page++;

        //創(chuàng)建StreamReader 對(duì)象

        StreamReader sr = new StreamReader(st,Encoding.UTF8);

        //獲取html文檔內(nèi)容

        string content = sr.ReadToEnd();

        //創(chuàng)建HtmlDocument對(duì)象

        var htmlDocument = new HtmlDocument();

        //載入html文檔內(nèi)容到HtmlDocument對(duì)象中

        htmlDocument.LoadHtml(content);

        //獲取html文檔的標(biāo)簽節(jié)點(diǎn)

        var html = htmlDocument.DocumentNode;

        //如果輸入的分頁(yè)頁(yè)碼超出實(shí)際搜索結(jié)果的分頁(yè)頁(yè)碼的范偉,則退出循環(huán)

        if(html.CssSelect(“title”).FirstOrDefault().InnerHtml.Equals(“搜索零結(jié)果”))

        {

        break;

        }

        //獲取class為red的p標(biāo)簽節(jié)點(diǎn)(即價(jià)格信息標(biāo)簽節(jié)點(diǎn))

        var prices = html.CssSelect(“p.red”);

        //將價(jià)格信息保存到自定義的集合中

        foreach(var htmlNode in prices)

        {

        priceStrList.Add(htmlNode.InnerHtml);

        }

        }

        return priceStrList;

        }

        catch(Exception ex)

        {

        throw ex;

        }

        }

        4、效果測(cè)試

        在.Net控制臺(tái)項(xiàng)目中對(duì)上述代碼進(jìn)行測(cè)試,測(cè)試實(shí)例為抓取ISBN號(hào)為“9787302423287”的圖書的價(jià)格信息。測(cè)試程序的代碼如下:

        //實(shí)例化孔夫子圖書價(jià)格抓取輔助類的對(duì)象

        KongfuziPriceHelper helper = new KongfuziPriceHelper();

        //調(diào)用GetKongfuziPriceByIsbn方法抓取圖書的價(jià)格信息

        List priceStrList = helper.GetKongfuziPriceByIsbn(“9787302423287”);

        //價(jià)格記錄數(shù)

        int count = 0;

        //在控制臺(tái)中輸出所有價(jià)格

        foreach(var item in priceStrList)

        {

        count++;

        Console.WriteLine(item);

        }

        //在控制臺(tái)中輸出價(jià)格記錄數(shù)

        Console.WriteLine(“總計(jì):” + count + “條記錄”);

        運(yùn)行測(cè)試程序,控制臺(tái)輸出結(jié)果如圖3所示。

        孔夫子舊書網(wǎng)上對(duì)ISBN號(hào)為“9787302423287”的圖書進(jìn)行搜索的結(jié)果如圖4所示。

        由于搜索結(jié)果的顯示頁(yè)面過(guò)長(zhǎng),只截取頁(yè)面局部,可以看到搜索結(jié)果的圖書記錄為78條,與測(cè)試結(jié)果一致?;赟crapySharp的孔夫子舊書網(wǎng)的圖書價(jià)格信息抓取器實(shí)現(xiàn)了預(yù)期的功能。

        四、總結(jié)

        ScrapySharp使用簡(jiǎn)單,使得.Net開發(fā)者更容易地解析Html文檔,靈活地采集網(wǎng)頁(yè)信息。應(yīng)用此技術(shù)可以方便、高效地實(shí)現(xiàn)孔夫子舊書網(wǎng)的圖書價(jià)格信息抓取器。測(cè)試結(jié)果表明,該軟件的功能達(dá)到了預(yù)期效果。

        參考文獻(xiàn):

        [1]于娟,劉強(qiáng).主題網(wǎng)絡(luò)爬蟲研究綜述[J].計(jì)算機(jī)工程與科學(xué),2015(02):231-237.

        [2]孫立偉,何國(guó)輝,吳禮發(fā).網(wǎng)絡(luò)爬蟲技術(shù)的研究[J].電腦知識(shí)與技術(shù),2010(15):4112-4115.

        [3]喬峰.基于模板化網(wǎng)絡(luò)爬蟲技術(shù)的Web網(wǎng)頁(yè)信息抽取[M].電子科技大學(xué),2015.

        [4]肖劍.垂直搜索中一種高效穩(wěn)定的數(shù)據(jù)抓取方法的研究與實(shí)現(xiàn)[M].南京大學(xué),2014.

        中文字幕av伊人av无码av| 真人男女做爰无遮挡免费视频| 亚洲AV秘 无码二区在线| 亚洲精品在线观看一区二区| 日本一区二区视频在线| 久久婷婷人人澡人人爽人人爱 | 少妇三级欧美久久| 国产女主播免费在线观看| 极品一区二区在线视频| 免费高清av一区二区三区| 国产普通话对白视频二区| 最新国产精品精品视频 | 亚洲av无码专区国产乱码不卡| 亚洲男人堂色偷偷一区| 免费在线不卡黄色大片| 中文字幕日韩人妻在线视频 | 一区二区三区黄色一级片| 久久不见久久见www日本网| 人与禽交av在线播放| 在线国产视频精品视频| 国产一区二区三区男人吃奶| 国产亚洲精品久久久闺蜜| 免费无码肉片在线观看| 日产精品一区二区免费| 婷婷久久精品国产色蜜蜜麻豆| 免费a级毛片无码| 国内精品人妻无码久久久影院94 | 人妻AV无码一区二区三区奥田咲| 视频一区二区免费在线观看| 免费a级毛片在线播放不收费| 最近免费中文字幕| 亚洲精品午夜精品国产| 蜜臀av毛片一区二区三区| 无遮无挡爽爽免费毛片| 91久久国产自产拍夜夜嗨| 国产女人乱码一区二区三区| 亚洲国产成人av在线观看| 精品欧美乱子伦一区二区三区| 自拍偷拍另类三级三色四色| 激情综合色综合啪啪开心| 久久婷婷国产剧情内射白浆|