c# - HTML 屏幕抓取 - 并非所有元素都在 HttpWebResponse 中

标签 c# screen-scraping

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

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# 来获取存在于 Developer Tool View 中的 DOM,而不是 ViewSource 结果?

遗憾的是,该页面未公开,因此我无法粘贴 URL。

最佳答案

It doesn't seem to be loaded via ajax either.

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

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

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

关于c# - HTML 屏幕抓取 - 并非所有元素都在 HttpWebResponse 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11156558/

相关文章:

java - 如果变量不存在则替换为0

c# - Entity Framework 4.1 - 使用过滤器覆盖实体 (DBSet)

c# - 将一长串 IP 地址导入 Windows 防火墙的脚本?

c# - 将 DataGrid 绑定(bind)到 ObservableCollection<Dictionary>

perl - WWW:机械化表格选择

Python 抓取 Html 的问题

jquery - 是什么阻止我使用 $.ajax 加载另一个域的 html?

C# - 使用选中/未选中运算符的自定义显式转换

c# - 使用 IAsyncEnumerable 通过 Blazor 通过 HTTP 流式传输文本行

python - BeautifulSoup:在 html 中查找特定 URL 并打印