如何使用 .java 中的正则表达式获取页面元(标题、描述、图像),如 facebook 附加 url
问问题
21056 次
4 回答
15
这是一个读取网页并构建一小块 HTML 的片段,它将显示 Open Graph 图像,右侧的标题环绕图像。如果缺少 OG 标签,它会退回到仅使用 html 标题,因此它可以代表所有网页。
public static String parsePageHeaderInfo(String urlStr) throws Exception {
StringBuilder sb = new StringBuilder();
Connection con = Jsoup.connect(urlStr);
/* this browseragant thing is important to trick servers into sending us the LARGEST versions of the images */
con.userAgent(Constants.BROWSER_USER_AGENT);
Document doc = con.get();
String text = null;
Elements metaOgTitle = doc.select("meta[property=og:title]");
if (metaOgTitle!=null) {
text = metaOgTitle.attr("content");
}
else {
text = doc.title();
}
String imageUrl = null;
Elements metaOgImage = doc.select("meta[property=og:image]");
if (metaOgImage!=null) {
imageUrl = metaOgImage.attr("content");
}
if (imageUrl!=null) {
sb.append("<img src='");
sb.append(imageUrl);
sb.append("' align='left' hspace='12' vspace='12' width='150px'>");
}
if (text!=null) {
sb.append(text);
}
return sb.toString();
}
于 2013-09-18T19:17:47.537 回答
6
正如 Ishikawa Yoshi 提到的,使用JSoup
例子:
Document doc = Jsoup.connect("http://example.com/").get()
for(Element meta : doc.select("meta")) {
System.out.println("Name: " + meta.attr("name") + " - Content: " + meta.attr("content"));
}
此代码未经测试,希望对您有所帮助。
使用 RegEx 抓取文档是个坏主意,请在 Coding Horror 上阅读
于 2013-01-22T07:23:02.290 回答
3
这个怎么样?下面的语句解析所有以“og:”开头的标签。这很有用。
doc.select("元[属性^=og:]")
void parseOGTag(String response) {
// Parse og tags
Document doc = Jsoup.parse(response);
Elements ogTags = doc.select("meta[property^=og:]");
if (ogTags.size() <= 0) {
return;
}
// Set OGTags you want
String title;
String desc;
String image;
for (int i = 0; i < ogTags.size(); i++) {
Element tag = ogTags.get(i);
String text = tag.attr("property");
if ("og:image".equals(text)) {
image = tag.attr("content");
} else if ("og:description".equals(text)) {
desc = tag.attr("content");
} else if ("og:title".equals(text)) {
title = tag.attr("content");
}
}
}
于 2016-03-21T06:09:37.697 回答
1
我使用JSOUP来获取一个Document
对象,然后使用类似下面的方法来获取我正在寻找的每个属性的标签。
String findTag(Document document, String property) {
String tag = null;
String cssQuery = "meta[property='og:" + property + "']";
Elements elements = document.select(cssQuery);
if (elements != null && elements.size() >= 1) {
tag = elements.first().attr("content");
}
return tag;
}
我经常使用它来决定将获取(使用 JSOUP)和解析组合到一个名为ogmapper的库中。
于 2019-05-16T13:41:49.793 回答