在某些网站上找不到带有 jSoup 的 OpenGraph 标签

Fail to find OpenGraph tags with jSoup on some websites

我正在尝试从网站提取 OpenGraph 元数据以向用户显示预览。我正在使用 jSoup,特别是在提取图像时遇到问题 url。对于我测试过的一些(或大多数,实际上)网站,下面的代码工作得很好,但少数给我带来了问题。最突出的是 YouTube。例如: 在该页面的 Chrome 中使用 "Inspect Element" 时: https://www.youtube.com/watch?v=AskAQwOBvhc 我的代码 returns null,而经过检查我希望找到 这个:

"//s.ytimg.com/yts/img/youtube_logo_stacked-vfl225ZTx.png"

来自页眉中的以下行:

<meta property="og:image" content="//s.ytimg.com/yts/img/youtube_logo_stacked-vfl225ZTx.png">

但是我的代码 returns 为空,这与测试许多其他站点时相反,例如: http://www.bbc.com/culture/story/20150304-is-house-of-cards-worth-watching 我在哪里找到所需的 URL.

Document document = null; 
try {
    document = Jsoup.connect(Url).get();
} catch (IOException e) { 
    e.printStackTrace();
}

String ogImage = null; 
Elements metaOgImage = document.select("meta[property=og:image]");

if (metaOgImage!=null) {
 ogDescription = metaOgImage.first().attr("content");
}

我还尝试遍历元素,看看我想要的标签是否不是第一个。我不太熟悉 HTML 和网络技术,但我倾向于相信这两个网站之间存在一些我未能识别的明显差异。

如果可能有更多的 metaOgImage 试试这个:

Elements metaOgImage = doc.getElementsByTag("meta");

for(Element og : metaOgImage){

   if((og.attr("property").toString()).equalsIgnoreCase("og:image")){

     ogDescription = og.attr("content").toString();

}
}

好的,看来我已经解决了。加载的文档与在 Chrome 中查看时不同,因为 UserAgent 不同。我改变了:

document = Jsoup.connect(Url).get();

进入:

document = Jsoup.connect(Url).userAgent(myUserAgent).get();