如何获取给定URL的网页描述/内容。 (类似于Google为每个结果链接提供简短的描述)。 我想在我的jsp页面中实现此功能。
提前感谢!
提前感谢!
想法: 以流的形式打开URL,然后解析其描述元标记中的字符串。
抓取URL内容:
URL url = new URL("http://www.url-to-be-parsed.com/page.html");
BufferedReader in = new BufferedReader(
new InputStreamReader(
url.openStream()));
根据你所使用的HTML解析库(流、字符串等),需要微调上面的代码。
对标签进行HTML解析:
<meta name="description" content="This is a place where webmasters can put a description about this web page" />
<title>This is the title of the page!</title>
注意:正则表达式在HTML文档上似乎不可靠,因此最好使用HTML解析器。
使用HTML解析器的示例:
HasAttributeFilter
按具有name="description"
属性的标记进行过滤Node
转换为MetaTag
MetaTag.getAttribute()
获取content
代码:
import org.htmlparser.Node;
import org.htmlparser.Parser;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;
import org.htmlparser.filters.HasAttributeFilter;
import org.htmlparser.tags.MetaTag;
public class HTMLParserTest {
public static void main(String... args) {
Parser parser = new Parser();
//<meta name="description" content="Some texte about the site." />
HasAttributeFilter filter = new HasAttributeFilter("name", "description");
try {
parser.setResource("http://www.youtube.com");
NodeList list = parser.parse(filter);
Node node = list.elementAt(0);
if (node instanceof MetaTag) {
MetaTag meta = (MetaTag) node;
String description = meta.getAttribute("content");
System.out.println(description);
// Prints: "YouTube is a place to discover, watch, upload and share videos."
}
} catch (ParserException e) {
e.printStackTrace();
}
}
}
注意事项:
如果每次加载页面时都在JSP中执行此操作,由于与URL的网络I/O可能会导致减速。更糟糕的是,如果您对包含许多URL链接的页面进行每次实时操作,则由于n个URL的顺序操作,减速可能会非常严重。也许您可以将此信息存储在数据库中,并根据需要刷新它们,而不是在JSP中实时执行。