2014-09-02 74 views
0

我想學習一些基本的刮擦和感謝這個網站我已經能夠學到很多新東西,但現在我堅持這個問題...這是代碼我使用:Html Agility Pack空值從表

var web = new HtmlWeb(); 
var doc = web.Load("url"); 
var nodes = doc.DocumentNode.SelectNodes("//*[@id='hotellist_inner']/div"); 
StreamWriter output = new StreamWriter("out.txt"); 

if (nodes != null) 
{ 
    foreach (HtmlNode item in nodes) 
    { 
     if (item != null && item.Attributes["data-recommended"] != null) 
     { 
      string line = ""; 
      var nome = item.SelectSingleNode(".//h3/a").InnerText; 
      var rating = item.SelectSingleNode(".//span[@class='rating']").InnerText; 
      var price = item.SelectSingleNode("./div[2]/div[3]/div[2]/table/tbody/tr/td[4]/div/strong[1]"); 
      var discount = item.SelectSingleNode("./div[2]/div[3]/div[2]/table/tbody/tr/td[4]/div/div[1]"); 
      line = line + nome + "," + rating + "," + price + "," + discount; 
      Console.WriteLine(line); 
      output.WriteLine(line); 
     } 
    } 
} 

這一切工作正常,前兩個項目(名稱和等級),但是當涉及到價格和折扣,我得到空的結果。我用鉻刮板分析了頁面(這裏是link),它使用我已經使用的xpath輕鬆獲得結果。我不明白我做錯了什麼。 任何幫助,將不勝感激! :D

回答

0

快速瀏覽一下您試圖抓取的網頁後,並非所有的item都有價格和折扣信息。您需要正確處理此案例以避免異常,例如在獲取InnerText之前檢查null。你的這種細微變化的代碼是能夠得到價格和折扣信息,如果有的話:

if (item != null && item.Attributes["data-recommended"] != null) 
{ 
    string line = ""; 
    var nome = item.SelectSingleNode(".//h3/a").InnerText; 
    var rating = item.SelectSingleNode(".//span[@class='rating']").InnerText; 
    var price = item.SelectSingleNode("./div[2]/div[3]/div[2]/table/tbody/tr/td[4]/div/strong[1]"); 
    var discount = item.SelectSingleNode("./div[2]/div[3]/div[2]/table/tbody/tr/td[4]/div/div[1]"); 
    //set priceString to empty string if price is null, else set it to price.InnerText 
    var priceString = price == null ? "" : price.InnerText; 
    //do similar step for discountString 
    var discountString = discount == null ? "" : discount.InnerText; 
    line = line + nome + "," + rating + "," + priceString + "," + discountString; 
    Console.WriteLine(line); 
    output.WriteLine(line); 
} 
+0

由於FOT答案!我已經嘗試過您的更改,但很遺憾,我仍然得到空的結果。我可以正確地獲得名稱和評分,但其他項目是空的,就好像在源頁面中根本沒有價格,而我可以看到有一些! 爲什麼代碼適合你而不適合我? :(:(( – Jack 2014-09-03 21:14:45

+0

它看起來好像它只是不會讀取內部表中的內容......是否有可能?事實上,如果我嘗試從主節點獲取所有HTML,我仍然不會得到價格或折扣。 – Jack 2014-09-03 21:21:31

+0

不,不可能,據我所知 – har07 2014-09-04 13:44:05