使用C#访问网页的内容

时间:2009-07-14 14:23:55

标签: c# .net dom

我正在尝试使用C#访问网页的内容。例如,我想抓住谷歌主页正文的文本。

我知道这在C#中可以通过Web浏览器控制来实现。但我找不到一个好的,简单的例子。我在网上找到的所有资源都涉及创建我不需要的表单和GUI,我只需要一个好的旧控制台应用程序。

如果有人可以提供一个基于控制台的简单代码片段来完成上述操作,那么我们将非常感激。

7 个答案:

答案 0 :(得分:14)

实际上,WebBrowser是一个GUI控件,用于您想要可视化网页(在Windows应用程序中嵌入和管理Internet Explorer)。如果您只需要获取网页的内容,可以使用WebClient类:

class Program
{
    static void Main(string[] args)
    {
        using (var client = new WebClient())
        {
            var contents = client.DownloadString("http://www.google.com");
            Console.WriteLine(contents);
        }
    }
}

答案 1 :(得分:1)

如果您只想要内容而不是实际的浏览器,可以使用HttpWebRequest。

以下是代码示例: http://www.c-sharpcorner.com/Forums/ShowMessages.aspx?ThreadID=58261

答案 2 :(得分:1)

您可以这样做:

Uri u = new Uri( @"http://launcher.worldofwarcraft.com/alert" );
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(u);
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
System.IO.Stream st = res.GetResponseStream();
System.IO.StreamReader sr = new System.IO.StreamReader(st);
string body = sr.ReadToEnd();
System.Console.WriteLine( "{0}", body ); 

以上代码显示了WoW USA的维护信息(如果已发布任何消息)

答案 3 :(得分:1)

您还可以使用WatiN库轻松加载和操作网页。这被设计为Web UI的测试库。要使用它,请从官方网站http://watin.sourceforge.net/获取最新信息。对于C#,控制台应用程序中的以下代码将为您提供Google主页的HTML(这是从WatiN网站上的入门示例中修改的)。该库还包含许多有用的方法,用于获取和设置页面的各个部分,执行操作和检查结果。

   using System;
    using WatiN.Core;

    namespace Test
    {
      class WatiNConsoleExample
      {
        [STAThread]
        static void Main(string[] args)
        {
          // Open an new Internet Explorer Window and
          // goto the google website.
          IE ie = new IE("http://www.google.com");

          // Write out the HTML text of the body
          Console.WriteLine(ie.Text);


          // Close Internet Explorer and the console window immediately.
          ie.Close();

          Console.Readkey();
        }
      }
    } 

答案 4 :(得分:0)

HTML Agility Pack可能就是您所需要的。它通过DOM和XPath提供对HTML页面的访问。

答案 5 :(得分:0)

Google屏幕抓取并如上所述使用HttpWebRequest。当你做任何你正在做的事情时,我建议你使用Fiddler来帮助你找出真正发生的事情。

答案 6 :(得分:0)

已经十年了,Microsoft不再推荐WebClient用于原始接受答案中指定的新开发。当前的建议是使用System.Net.Http命名空间中的Httpclient。

来自https://docs.microsoft.com/en-us/dotnet/api/system.net.http.httpclient?view=netcore-3.1

的当前示例

// HttpClient is intended to be instantiated once per application, rather than per-use. See Remarks.
static readonly HttpClient client = new HttpClient();

static async Task Main()
{
  // Call asynchronous network methods in a try/catch block to handle exceptions.
  try   
  {
     HttpResponseMessage response = await client.GetAsync("http://www.contoso.com/");
     response.EnsureSuccessStatusCode();
     string responseBody = await response.Content.ReadAsStringAsync();
     // Above three lines can be replaced with new helper method below
     // string responseBody = await client.GetStringAsync(uri);

     Console.WriteLine(responseBody);
  }
  catch(HttpRequestException e)
  {
     Console.WriteLine("\nException Caught!");  
     Console.WriteLine("Message :{0} ",e.Message);
  }
}`