在互联网上,大多数文章都讨论了如何在页面本身读取和写入标签。然而,本文的方法是动态下载页面内容并从中读取meta标签。首先,需要在不加载到浏览器的情况下下载页面内容。为此,将使用WebRequest类。下面的代码创建了一个指向"http://www.microsoft.com/en/us/default.aspx"的请求,使用默认凭据。
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 reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
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 + "");
}
}
当然,可以用上面的代码做更多的事情。但将在后面的文章中讨论这个问题。为了参考,将完整的代码贴在下面。为了使示例工作,请添加对mshtml的引用。
步骤:
现在可以引用这个程序集了。别忘了添加命名空间。
using mshtml;
Response.Write("Button2_Click");
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 reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
Console.WriteLine(responseFromServer);
reader.Close();
dataStream.Close();
response.Close();
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 + "");
}
}
通过上述步骤,可以动态下载网页内容并读取其中的meta标签。这种方法在某些情况下非常有用,比如在爬虫程序中,需要从网页中提取特定的信息。
需要注意的是,这种方法可能会受到网络环境和服务器配置的影响。在某些情况下,服务器可能会阻止请求,或者返回不完整的内容。因此,在实际应用中,需要根据具体情况进行调整。