2011-03-07 97 views
0

我的要求是动态地从网页中提取所有链接(使用“a href”)。我正在使用JSP。更具体地说,我正在JSP中构建一个元搜索引擎。所以当用户输入查询条目时,我必须从雅虎的搜索结果页面中提取链接,请求,谷歌,妈妈等。 为了获得字符串格式的页面,我现在使用的代码是。如何使用jsp从网页中提取链接?

> > 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); } 

现在,我的要求是:你能否提出一些方法来从字符串网页中提取链接? 或者还有其他方法来提取这些链接?我宁愿不使用任何外部软件包。

+1

*我宁愿不使用任何外部软件包。*甚至不是Jsoup? Jsoup非常容易。示例:http://stackoverflow.com/questions/3394298/full-link-extraction-using-java/3400017#3400017 – BalusC 2011-03-07 17:36:52

回答

1

一个快速的解决办法是使用正则表达式匹配器对象拉网址出来:

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模式一点点,使其更加密不透风,但是这是一个快速和肮脏的解决方案,无需使用外部库