2

我目前正在尝试使用以下代码进行屏幕抓取:

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。

4

2 回答 2

2

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

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

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

但由于 WebBrowser 控件并非设计用于多线程环境(例如 Web 应用程序),您将不得不使用第三方库来完成该抓取任务。

于 2012-06-22T13:02:52.020 回答
0

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

于 2012-07-06T18:50:04.983 回答