【发布时间】:2013-11-16 16:52:40
【问题描述】:
我正在使用 HtmlAgilityPack 来获取页面的元描述和其他描述。该代码适用于Tumblr.、Twitter、Stack Overflow等简单网站。
但是当我尝试加载主要网站时,例如Google,它只显示了一个 Google 标题,没有描述标签。 Facebook 类似,它没有显示任何描述,但它显示的标题更新您的浏览器 |脸书。
我是这个包的新手,我从 MS WebMatrix 的 NuGet 包下载了它的最新版本。我使用的代码如下:
@using HtmlAgilityPack;
@{
Layout = "~/_SiteLayout.cshtml";
var Title = "";
var Description = "";
using(var client = new WebClient()){
var html = client.DownloadString("http://www.facebook.com");
var doc = new HtmlDocument();
doc.LoadHtml(html);
var title = doc.DocumentNode.Descendants("title").FirstOrDefault();
if(title != null){
Title = title.InnerText;
}
var description = doc.DocumentNode.Descendants("meta")
.Where(n => n.GetAttributeValue("name", String.Empty)
.Contains("description")).FirstOrDefault();
if(description != null){
Description = description.GetAttributeValue("content", string.Empty);
}
}
}
这个问题,顾名思义,看起来像是一个旧的浏览器问题。如何解决这个问题?
【问题讨论】:
-
您可能想发送一个用户代理字符串,而不是 .NET 框架发送的默认字符串...参见:stackoverflow.com/a/11841680/736079 至于描述,facebook 和 google 发出的 HTML 没有'不包含元描述标签,所以没有什么可找到的。
-
哦,这对我来说是一个很好的新信息! :) 那么,其他网站是做什么的呢?让我们说Facebook。他们也分享了谷歌的描述。他们如何获取它?还是他们自己写的?
-
Facebook 似乎仅在您未登录时才会发送元描述标签...当您修复 UserAgent 字符串时,他们实际上可能会向您发送一个。
-
噢!让我试试吧! :) 但他们仍然没有发送任何内容。