• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于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.

      漯河市| 靖西县| 大新县| 平遥县| 朝阳区| 武乡县| 衢州市| 大洼县| 海盐县| 绥芬河市| 平阳县| 涡阳县| 尤溪县| 铜鼓县| 修水县| 高密市| 横峰县| 漳浦县| 侯马市| 甘孜| 肥城市| 普兰店市| 郴州市| 松江区| 墨江| 冷水江市| 喀喇沁旗| 荃湾区| 周口市| 塘沽区| 大渡口区| 乌鲁木齐市| 三亚市| 隆尧县| 射洪县| 秦皇岛市| 苗栗市| 婺源县| 绍兴县| 淳安县| 沈丘县|