2012-11-28 27 views
1

我正在嘗試創建一個地鐵應用程序,其中包含我的大學的主題時間表。我使用HAP + Fizzler解析頁面並獲取數據。WinRT網頁解析/ DocumentNode.InnerHtml =「URI」而非頁面html

計劃鏈接給我@Too許多自動重定向@錯誤。 我發現CookieContainer可以幫助我,但不知道如何實現它。

 CookieContainer cc = new CookieContainer(); 
     request.CookieContainer = cc; 

我的代碼:

  public static HttpWebRequest request; 
    public string Url = "http://cist.kture.kharkov.ua/ias/app/tt/f?p=778:201:9421608126858:::201:P201_FIRST_DATE,P201_LAST_DATE,P201_GROUP,P201_POTOK:01.09.2012,31.01.2013,2423447,0:"; 
    public SampleDataSource() 
    { 

     HtmlDocument html = new HtmlDocument(); 
     request = (HttpWebRequest)WebRequest.Create(Url); 
     request.Proxy = null; 
     request.UseDefaultCredentials = true; 
     CookieContainer cc = new CookieContainer(); 
     request.CookieContainer = cc; 
     html.LoadHtml(request.RequestUri.ToString()); 
     var page = html.DocumentNode; 

String ITEM_CONTENT = null; 
foreach (var item in page.QuerySelectorAll(".MainTT")) 
{ 
    ITEM_CONTENT = item.InnerHtml; 
} 
     } 

用的CookieContainer我不明白的錯誤,但DocumentNode.InnerHtml由於某種原因,讓我的URL,而不是HTML頁面的價值。

回答

1

你只需要改變一行。

更換

html.LoadHtml(request.RequestUri.ToString()); 

html.LoadHtml(new StreamReader(request.GetResponse().GetResponseStream()).ReadToEnd()); 

編輯

首先標記你的方法爲async

request.CookieContainer = cc; 
var resp = await request.GetResponseAsync(); 
html.LoadHtml(new StreamReader(resp.GetResponseStream()).ReadToEnd()); 
+0

無法解析符號「的GetResponse」。 –

+0

檢查,也許你有一些'GetResponseAsync'等我現在無法在Metro應用中測試它。我在Win7中測試了上面的代碼並且可以工作。這裏的關鍵是你必須得到響應流並重新處理它。 –

+0

我處理它。但是GetResponseAsync沒有GetResponseStream()或類似的東西。 –

0

如果你想下載網頁代碼嘗試使用此方法(通過使用HttpClient):如果你要分析你下載htmlcode你可以使用正則表達式或LINQ

public async Task<string> DownloadHtmlCode(string url) 
    { 
     HttpClientHandler handler = new HttpClientHandler { UseDefaultCredentials = true, AllowAutoRedirect = true }; 
     HttpClient client = new HttpClient(handler); 
     HttpResponseMessage response = await client.GetAsync(url);     
     response.EnsureSuccessStatusCode(); 
     string responseBody = await response.Content.ReadAsStringAsync(); 
     return responseBody; 
    } 
0

。我有一些使用LINQ解析html代碼的例子,但是在使用HtmlAgilityPack庫之前,應該將代碼加載到HtmlDocument中。然後,你可以通過這種方式加載:html.LoadHtml(temphtml); 當你這樣做,你可以分析你的HTMLDocument:

//This is for img links parse-example: 
IEnumerable<HtmlNode> imghrefNodes = html.DocumentNode.Descendants().Where(n => n.Name == "img"); 
foreach (HtmlNode img in imghrefNodes) 
{ 
    HtmlAttribute att = img.Attributes["src"]; 
    //in att.Value you can find your img url 
    //Here you can do everything what you want with all img links by editing att.Value 
}