【问题标题】:Get output of web page in C#在 C# 中获取网页的输出
【发布时间】:2016-03-31 01:56:38
【问题描述】:

我正在尝试获取生成的网页内容,以便提取显示文本。我尝试了下面的代码,但它让我得到了源 html,而不是生成的 html。

string urlPath = "http://www.cbsnews.com/news/jamar-clark-protests-follow-decision-not-to-file-charges-in-minneapolis-police-shooting/";
WebClient client = new WebClient();
string str = client.DownloadString(urlPath);

将 str 变量中的文本与 Chrome 浏览器中开发者工具中的 html 进行比较,您会得到不同的结果。

我们将不胜感激。

【问题讨论】:

  • 问题是......?
  • Chrome 解析 HTML 而不仅仅是检索它。这意味着处理特殊字符、换行符等。你到底想做什么?您所看到的可能更接近“查看页面源代码”edit 此外,在页面上执行的 javascript、加载的 iframe 等等都可以更改呈现的 html 与源代码,因此它可能永远不会无论如何都要准确
  • 问题是“如何通过c#获取浏览器中显示的文本”。
  • 我正在尝试提取显示的文本以供分析。上面的代码只给我 html 而不是实际的输出。那么,在所有 javascript 执行和其他事件发生后,我如何获取 html?

标签: c# html output htmltext


【解决方案1】:

我假设您的意思是您想要文章文本。如果是这样,您将需要采取不同的行动方案。您引用的页面加载了客户端脚本,该脚本将大量内容注入基本 HTML 文档。这是通过执行客户端脚本来完成的。你需要在脚本执行后解析 DOM 以获得你感兴趣的内容。

【讨论】:

  • 我会走javascript路线。谢谢。
【解决方案2】:

正如其他人所指出的,实际的网络浏览器会解析下载的 HTML 并对其执行 javascript,可能会更改其内容。虽然您可以尝试自己解析,但最简单的方法是让真正的网络浏览器为您解析,然后获取结果。

特别是在 C# 中最简单的解决方案是使用 Windows 窗体中的 WebBrowser Control,它本质上将 IE 暴露给您的程序,允许您控制它。使用 Navigate 方法加载相关 URL,然后使用 Document 属性导航 DOM。此时,您可以获取 outerHTML 以获取 DOM 的最终内容为 HTML。

如果您不是在编写 Windows 程序并且对无头操作更感兴趣,请查看PhantomJS。它是一个无头的 Webkit 浏览器,可以从 javascript 编写脚本,并且可以为您提供类似的功能,尽管不是在 C# 中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    • 2014-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多