【问题标题】:how do I use C# to dump a web page's HTML to a text file?如何使用 C# 将网页的 HTML 转储到文本文件?
【发布时间】:2015-02-03 07:06:52
【问题描述】:

我正在做一个项目,我需要能够获取一个网站 url www.google.com 例如,并在一个文本文件中获取它的 html 以单独解析,但我不知道该怎么做.

我知道有一种比我现在做的更简单的方法,但这是一个旨在使用和增加知识的项目。

【问题讨论】:

  • "有一种比我做的更简单的方法" - 你到底在做什么?你能展示一些你的努力吗?否则不可能说 - 有没有更简单的方法。
  • 所以您是说您想获取网页的内容并将其保存到文件中?所以换句话说,你只想下载一个 URL?给定一个 URL,你还怎么下载东西?

标签: c# html


【解决方案1】:

使用WebClient 只下载一个文件的 URL 非常简单:

using (var client = new WebClient())
{
    client.DownloadFile(url, filename);
}

更棘手的一点是,很少有网页真正由单个 HTML 组成 - 大多数网页然后加载 Javascript,或者加载更多数据使用 Javascript,等等。

在 .NET 4.5 及更高版本中,您可能希望使用 HttpClient 而不是 WebClient - 尽管它是异步的并且(据我所见)并没有提供任何方便相当就像DownloadFile 一样,这就是你想要做的。

【讨论】:

  • 当前示例不起作用。似乎您混淆了解释的两个部分并在示例代码中错误地写了HttpClient 而不是WebClient
【解决方案2】:

C# WebClient 类可以帮助你实现这一点:

using System;
using System.Net;
using System.IO;

    using (WebClient client = new WebClient())
    {
        string htmlCode = client.DownloadString("http://somesite.com/default.html");
        File.WriteAllText(@"c:\YourLocalFolder\somefile.txt", htmlCode);
    }

【讨论】:

    【解决方案3】:

    你可以试试 HtmlAgilityPack:

    string Url = "http://something";
    HtmlWeb web = new HtmlWeb();
    HtmlDocument doc = web.Load(Url);
    string contents= doc.DocumentNode.OuterHtml;
    File.WriteAllText("X:\abc\def.txt", contents);
    

    【讨论】:

    • 该代码使用什么库? WebClient/HttpClient 有什么问题?
    • @JonSkeet 我会说Html Agility Pack,看起来很像like this ... :)
    • 对。那么这已经在解析html了吗?如果是这样,它可能会破坏 OP 的意图(稍后解析)。这取决于确切的上下文,但这是一种仅下载 HTML 的复杂方式...
    【解决方案4】:

    如果所有其他文件,您可以使用 WebBrowser 控件在您的应用程序中运行 IE,这可以让页面上的 jscript 运行等。然后您可以从 C# 访问 DOM。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-15
      • 1970-01-01
      • 2010-10-10
      • 1970-01-01
      • 1970-01-01
      • 2012-11-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多