在某些网站上找不到带有 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();
我正在尝试从网站提取 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();