C# 从网页中读取文本

C# 从网页中读取文本,c#,webpage,C#,Webpage,请注意:我不想阅读网页的HTML内容,而是想阅读网页上的文本。想象一下下面的例子,如果你愿意的话- 一个PHP脚本将“Hello User X”回显到当前页面上,因此用户现在正在查看一个页面(主要为空白),页面左上角印有“Hello User X”字样。从我的C#应用程序中,我想将文本读入字符串 String strPageData = functionToReadPageData("http://www.myURL.com/file.php"); Console.WriteLine(strP

请注意:我不想阅读网页的HTML内容,而是想阅读网页上的文本。想象一下下面的例子,如果你愿意的话-

一个PHP脚本将“Hello User X”回显到当前页面上,因此用户现在正在查看一个页面(主要为空白),页面左上角印有“Hello User X”字样。从我的C#应用程序中,我想将文本读入字符串

String strPageData = functionToReadPageData("http://www.myURL.com/file.php");

Console.WriteLine(strPageData); // Outputs "Hello User X" to the Console.
在VB6中,我可以通过使用以下API实现这一点:
  • 互联网开放
  • 互联网开放
  • InternetReadFile
  • Internet闭合手柄

  • 我试图将我的VB6代码移植到C#,但我运气不好-因此我非常感谢使用C#方法来完成上述任务。

    您应该使用WebClient类来完成此操作。

    我不知道.NET framework中有任何部分可以让您自动从HTML文件中提取所有文本。我非常怀疑它的存在

    您可以尝试使用HtmlAgilityPack(第三方)访问HTML文档中的文本元素等

    不过,您仍然需要编写逻辑来找到正确的HTML元素。类似以下内容的HTML页面:

    <html>
         <body>Some text</body>
    </html>
    
    按照这种模式,您可以读取页面上的每个元素。您可能需要进行一些后期处理以删除中断、注释等


    下面的代码可能会对您有所帮助

    string result = "";
    try
    {
         using (StreamReader sr = new StreamReader(IOParams.ConfigPath +"SUCCESSEMPTMP.HTML"))
         {
               result = sr.ReadToEnd();
               result = result.Replace("<body/>", "<body>");
               result = result.Replace("</body>", "<body>");
               List<string> body = new List<string>(result.Split(new string[] { "<body>" }, StringSplitOptions.None));
               if (body.Count > 2)
               {
                    result = body[1];
               }
          }
    }
    catch (Exception e)
    {
        throw e;
    }
    
    return result;
    
    字符串结果=”;
    尝试
    {
    使用(StreamReader sr=new StreamReader(IOParams.ConfigPath+“successmptmp.HTML”))
    {
    结果=sr.ReadToEnd();
    结果=结果。替换(“,”);
    结果=结果。替换(“,”);
    列表体=新列表(result.Split(新字符串[]{”“},StringSplitOptions.None));
    如果(body.Count>2)
    {
    结果=正文[1];
    }
    }
    }
    捕获(例外e)
    {
    投掷e;
    }
    返回结果;
    
    我知道这是一篇比较老的帖子,但我很惊讶没有人提到使用
    microsoft.mshtml
    ,这对这类东西来说相当有效。您需要添加对
    microsoft.mshtml

    [右键单击
    解决方案资源管理器中项目中的
    引用
    。然后单击
    添加引用…
    。在
    程序集中键入搜索“HTML”,您将看到
    Microsoft.mshtml
    ]

    然后:


    它将返回网页的“OuterText”,这基本上是使用web浏览器访问网页时显示的文本。希望这能有所帮助。

    我不久前已经签出了这个类,但我只能阅读HTML,而不能阅读页面上的实际文本。你知道我做错了什么吗?+1。使用WebClient类并使用HTML解析器去除文本。如果您不想使用html解析器或正则表达式,可以保存html并使用IE或Safari使用javascript获取纯文本,例如:document.body.innerText如何定义文本?链接文本也是文本的一部分吗?还是仅包含在或标记中的字符串?按钮标签文本呢?@Phillip看这里:我只想返回“hah-mmm hdhd JKD 0 0”。请不要在你的问题前面加上“C#”之类的前缀。你已经用过标签了。这让我很困惑,我不知道如何让它正常工作。不过我会坚持下去,如果我能找到工作,我会告诉你的。。。不过,我宁愿不必为HTML费心。我现在将使用这种方法。非常感谢。
    string result = "";
    try
    {
         using (StreamReader sr = new StreamReader(IOParams.ConfigPath +"SUCCESSEMPTMP.HTML"))
         {
               result = sr.ReadToEnd();
               result = result.Replace("<body/>", "<body>");
               result = result.Replace("</body>", "<body>");
               List<string> body = new List<string>(result.Split(new string[] { "<body>" }, StringSplitOptions.None));
               if (body.Count > 2)
               {
                    result = body[1];
               }
          }
    }
    catch (Exception e)
    {
        throw e;
    }
    
    return result;
    
    using System.Net;
    using mshtml;
    
    using (var client = new WebClient())
    {
        var s = client.DownloadString(@"https://stackoverflow.com/questions/7264659/read-text-from-web-page");
        var htmldoc2 = (IHTMLDocument2)new HTMLDocument();
        htmldoc2.write(s);
        var plainText = htmldoc2.body.outerText;
        Console.WriteLine(plainText);
    }