【问题标题】:HTML Screen Scrape - Not All Elements Are In HttpWebResponseHTML 屏幕抓取 - 并非所有元素都在 HttpWebResponse 中
【发布时间】:2012-06-22 12:52:39
【问题描述】:

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

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,因为它存在于 Developer Tool 视图中,而不是 ViewSource 结果?

很遗憾,此页面不公开,因此我无法粘贴 URL。

【问题讨论】:

    标签: c# screen-scraping


    【解决方案1】:

    好像也不是通过ajax加载的。

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

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

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

    【讨论】:

    • 谢谢达林。当时我只能看到与使用 HttpWebRequest 相同的 HTML 源代码,但我不得不暂时放弃它。我会更多地研究它,如果我让它工作,我会接受答案。再次感谢您的帮助!
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-10
      • 1970-01-01
      • 1970-01-01
      • 2016-01-02
      • 1970-01-01
      • 2019-09-03
      • 2011-02-20
      相关资源
      最近更新 更多