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 结果?

不幸的是,此页面不公开可用,因此我无法粘贴URL。

它似乎也不是通过 ajax 加载的。

您无需使用 AJAX 即可将数据动态添加到 DOM。你可以完美地使用标准的javascript。

要抓取这样的页面,你需要一个处理javascript的抓取器。WinForms 中的 WebBrowser 控件就是这样做的。它允许你加载网页并浏览DOM,就像你在FireBug中所做的那样(除了快照来自IE,因为WebBrowser只是IE的包装器)。

但是,由于 WebBrowser 控件不是为在多线程环境(如 Web 应用程序)中使用而设计的,因此您必须使用第三方库来完成该抓取任务。

您是否使用Fiddler或Ethereal来查看后台连接到的URL?如果您在后台调用的某个 URL 的响应中找到 HTML 表,则可以从该 URL 中抓取数据。您尝试解析哪个 URL/表?

最新更新