国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

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

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

李金峰 郭冰 李金隆

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

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

一、引言

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

二、軟件功能描述

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

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

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

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

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

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

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

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

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

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

搜索零結果

據(jù)此,可以準確判斷搜索結果的分頁頁碼數(shù)。

3、ScrapySharp和Htlm文檔解析

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

遍歷文檔中的class為“red”的p標簽可以獲取當前頁中的所有圖書價格信息。

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

public List GetKongfuziPriceByIsbn(string isbn)

{

try

{

//價格信息集合

List priceStrList = new List();

//搜索結果分頁

int page = 1;

//讀取所有分頁的html文檔信息

while(true)

{

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

WebClient client = new WebClient();

//獲取搜索內容為isbn(圖書ISBN號)的搜索結果網(wǎng)址

string address = GetSearchUrl(isbn);

//獲取流

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

//分頁頁碼加1

page++;

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

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

//獲取html文檔內容

string content = sr.ReadToEnd();

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

var htmlDocument = new HtmlDocument();

//載入html文檔內容到HtmlDocument對象中

htmlDocument.LoadHtml(content);

//獲取html文檔的標簽節(jié)點

var html = htmlDocument.DocumentNode;

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

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

{

break;

}

//獲取class為red的p標簽節(jié)點(即價格信息標簽節(jié)點)

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

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

foreach(var htmlNode in prices)

{

priceStrList.Add(htmlNode.InnerHtml);

}

}

return priceStrList;

}

catch(Exception ex)

{

throw ex;

}

}

4、效果測試

在.Net控制臺項目中對上述代碼進行測試,測試實例為抓取ISBN號為“9787302423287”的圖書的價格信息。測試程序的代碼如下:

//實例化孔夫子圖書價格抓取輔助類的對象

KongfuziPriceHelper helper = new KongfuziPriceHelper();

//調用GetKongfuziPriceByIsbn方法抓取圖書的價格信息

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

//價格記錄數(shù)

int count = 0;

//在控制臺中輸出所有價格

foreach(var item in priceStrList)

{

count++;

Console.WriteLine(item);

}

//在控制臺中輸出價格記錄數(shù)

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

運行測試程序,控制臺輸出結果如圖3所示。

孔夫子舊書網(wǎng)上對ISBN號為“9787302423287”的圖書進行搜索的結果如圖4所示。

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

四、總結

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

參考文獻:

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

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

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

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