我正在使用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);
}
}
}
这个问题,按名称,看起来像一个旧的浏览器问题。如何解决这个问题?
答案 0 :(得分:0)
在搜索了很长时间之后,我从ASP.NET论坛获得了Mike Brind的解决方案。
var Image = "";
using(var client = new WebClient()){
client.Headers.Add("user-agent", "Mozilla/5.0 (Windows NT 6.3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36");
client.Headers.Add("method", "GET");
client.Headers.Add("version", "HTML/1.1");
client.Headers.Add("accept",
"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
var html = client.DownloadString("http://www.google.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);
}
var image = doc.DocumentNode.Descendants("link")
.Where(n => n.GetAttributeValue("rel", String.Empty)
.Contains("shortcut icon")).FirstOrDefault();
if(image != null) {
Image = image.GetAttributeValue("href", string.Empty);
}
}
这是此所需的代码。实际上最重要的是,当这个人从他的计算机创建一个新请求时,浏览器会向服务器发送一些细节,而我却没有发送任何内容。这就是为什么Facebook和Google没有向我回复任何东西。当我试图包含一些假标题时,他们向我提供了我需要的详细信息。
在那之后,很高兴去!