更新您的浏览器| Facebook的;由HtmlAgilityPack显示

时间:2013-11-16 16:52:40

标签: html-agility-pack

我正在使用HtmlAgilityPack来获取页面的元和其他描述。该代码适用于Tumblr.TwitterStack 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);
    }
  }
}

这个问题,按名称,看起来像一个旧的浏览器问题。如何解决这个问题?

1 个答案:

答案 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没有向我回复任何东西。当我试图包含一些假标题时,他们向我提供了我需要的详细信息。

在那之后,很高兴去!