2012-06-22 34 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中抓取数据。你想要解析哪个网址/表格?