我的要求是动态地从网页中提取所有链接(使用“a href”)。我正在使用 JSP 。更具体地说,我正在JSP中构建一个元搜索引擎。因此,当用户输入查询项时,我必须从yahoo,ask,google,momma等的搜索结果页面中提取链接。 为了以字符串格式获取页面,我现在使用的代码是。
> > try
{
> String sUrl_yahoo = "http://www.mamma.com/result.php?type=web&q=hai+bird&j_q=&l=";
>
> String nextLine;
> String webPage;
> StringBuffer wPage;
> String sSql;
> java.net.URL siteURL = new java.net.URL (sUrl_yahoo);
> java.net.URLConnection siteConn = siteURL.openConnection();
> java.io.BufferedReader in = new java.io.BufferedReader ( new java.io.InputStreamReader(siteConn.getInputStream() ) );
> wPage = new StringBuffer(30*1024);
> while ( ( nextLine = in.readLine() ) != null ) {
> wPage.append(nextLine); }
> in.close();
> webPage = wPage.toString(); out.println(webPage); }
> catch(Exception e) {
> out.println("Error" + e); }
现在,我的请求是:您能否建议某种方式从String webPage中提取链接? 或者是否有其他方法来提取这些链接?我更喜欢在不使用任何外部包的情况下这样做。
答案 0 :(得分:1)
一个快速的解决方案是使用正则表达式匹配器对象来拉出URL:
Pattern p = Pattern.compile("<a +href=\"([a-zA-z0-9\\:\\-\\/\\.]+)\">");
Matcher m = p.matcher(webPage);
ArrayList<String> foundUrls = new ArrayList<String>();
while(m.find()) {
foundUrls.add(m.group(1));
}
您可能需要稍微使用URL模式以使其更加密闭,但这是一个快速而肮脏的解决方案,而不使用外部库。