2012-06-22 35 views
2

我目前正在使用下面的代碼做一個屏幕抓取:HTML屏幕抓取 - 不是所有的元素都在HttpWebResponse

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url); 
HttpWebResponse theResponse = (HttpWebResponse) request.GetResponse(); 
using (StreamReader reader = new StreamReader(theResponse.GetResponseStream(), Encoding.UTF8)) 
{ 
    string s = reader.ReadToEnd(); 
} 

然而,我所關心的(一個HTML表)中的數據是不是一部分的結果。當我右鍵單擊頁面和ViewSource時,我也看不到我關心的HTML表格 - 但是當我使用Firebug檢查它時,我確實在DOM中看到了它。

它似乎並沒有通過ajax加載。

所以 - 有沒有另一種方法,使用C#來獲取DOM,因爲它存在於開發工具視圖中,而不是ViewSource結果?

不幸的是,此頁面不公開,所以我無法粘貼網址。

回答

2

它似乎並沒有通過ajax加載。

您不需要使用AJAX來動態地將數據添加到DOM。你可以完美地使用標準的JavaScript。

要刮這樣的頁面,你需要一個處理JavaScript的刮板。 WinForms中的WebBrowser控件可以做到這一點。它允許你加載一個網頁並探索DOM,就像你在FireBug中做的一樣(除了快照來自IE,因爲WebBrowser只是IE的包裝)。

但是由於WebBrowser控件並非設計用於多線程環境(例如Web應用程序)中,您將不得不使用第三方庫來實現該抓取任務。

+0

謝謝Darin。當時我只能看到與HttpWebRequest相同的HTML源代碼,但我必須放棄這一天。我會更深入地研究它,如果我能做到這一點,我會接受答案。再次感謝你的幫助! – MattW

0

您是否使用過Fiddler或Ethereal來查看背景中正在連接的URL?如果您在後臺調用的某個URL的響應中找到HTML表格,則可以從該URL中抓取數據。你想要解析哪個網址/表格?