65.9K
CodeProject 正在变化。 阅读更多。
Home

无需在浏览器中加载即可通过编程方式读取任何页面的 Meta 标签

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.86/5 (3投票s)

2013 年 10 月 11 日

CPOL

4分钟阅读

viewsIcon

17619

在本文中,我将向您展示如何使用 C# 和 Asp.Net 以编程方式读取 meta 标签。本文与其他文章的区别在于

在本文中,我将向您展示如何使用 C# 和 Asp.Net 以编程方式读取 meta 标签。本文与其他文章的区别在于,互联网上所有可用的样本都谈论从页面本身读取和写入标签,但在本文中,我们将采用动态下载页面内容并从中读取 meta 标签的方法。

首先,我们需要下载页面内容,而无需将其加载到浏览器中。为此,我们将使用 WebRequest 类。下面的代码使用默认凭据创建一个对“http://www.microsoft.com/en/us/default.aspx”的请求。

 // 为 URL 创建一个请求。            
 WebRequest request = WebRequest.Create("http://www.microsoft.com/en/us/default.aspx");
 // 如果服务器需要,请设置凭据。   
 request.Credentials = CredentialCache.DefaultCredentials;

 现在我们已准备好从客户端获取响应。为了接收响应,我们将使用 WebResponse 类,如下所示:

 // 获取响应。   
 HttpWebResponse response = (HttpWebResponse)request.GetResponse();

获取响应后,我们希望将其加载到 HTML DOM 中。正如您应该知道的,HTML 使用 DOM 模型加载文档。因此,在接下来的几行中,我们将以字符串形式获取响应,并使用该字符串来加载 IHTMLDocument2 类。

 // 获取包含服务器返回的内容的流。   
        Stream dataStream = response.GetResponseStream();
        // 使用 StreamReader 打开流以便于访问。   
        StreamReader reader = new StreamReader(dataStream);
        // 读取内容。   
        string responseFromServer = reader.ReadToEnd();

 //将 html 读取到 html 文档中以便解析   
        IHTMLDocument2 doc = new HTMLDocumentClass();
        doc.write(new object[] { responseFromServer });
        doc.close();

现在,我们已经将整个页面加载到内存中,形式为 HtmlDocument,我们将遍历它并从中检索 Meta 标签。


        // 循环遍历文档中的每个元素,以检查它是否符合设置属性的条件    
        foreach (IHTMLElement el in (IHTMLElementCollection)doc.all)
        {
            // 检查是否找到了所有期望的属性及其正确的值    
            bool qualify = true;
            if (el.tagName == "META")
            {
                HTMLMetaElement meta = (HTMLMetaElement)el;
                Response.Write("Content " + meta.content + "<br/>");
            }

        }   

当然,您还可以使用上面的代码做更多的事情。但这些将在其他文章中讨论。供您参考,我将完整的代码粘贴在下面。要使示例正常工作,请通过以下方式添加对 mshtml 的引用:

步骤:-

1.)在解决方案资源管理器中,突出显示要添加解析功能的项目。
2.)在菜单中,单击项目 -> 添加引用。
3.)在显示的对话框中,在“.Net”选项卡下,选择 Microsoft.mshtml 程序集。
4.)单击“选择”按钮,然后单击“确定”按钮。

现在我们可以引用此程序集。

 不要忘记添加命名空间:
 
using mshtml;

Response.Write("Button2_Click");

        // 为 URL 创建一个请求。            
        WebRequest request = WebRequest.Create("http://www.microsoft.com/en/us/default.aspx");
        // 如果服务器需要,请设置凭据。   
        request.Credentials = CredentialCache.DefaultCredentials;
        // 获取响应。   
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        // 显示状态。   
        Console.WriteLine(response.StatusDescription);
        // 获取包含服务器返回的内容的流。   
        Stream dataStream = response.GetResponseStream();
        // 使用 StreamReader 打开流以便于访问。   
        StreamReader reader = new StreamReader(dataStream);
        // 读取内容。   
        string responseFromServer = reader.ReadToEnd();
        // 显示内容。   
        Console.WriteLine(responseFromServer);
        // 清理流和响应。   
        reader.Close();
        dataStream.Close();
        response.Close();

        //将 html 读取到 html 文档中以便解析   
        IHTMLDocument2 doc = new HTMLDocumentClass();
        doc.write(new object[] { responseFromServer });
        doc.close();

        // 循环遍历文档中的每个元素,以检查它是否符合设置属性的条件   
        foreach (IHTMLElement el in (IHTMLElementCollection)doc.all)
        {
            // 检查是否找到了所有期望的属性及其正确的值   
            bool qualify = true;
            if (el.tagName == "META")
            {
                HTMLMetaElement meta = (HTMLMetaElement)el;
                Response.Write("Content " + meta.content + "<br/>");
            }

        }    

 

 

© . All rights reserved.