2010-08-01 40 views
0

我们如何找出页面中的超链接。
以及如何找出他们是什么? 我需要开发计划Java中的东西不在任何框架的工作,这意味着,通过使用
JAVA.NET。*;方法,任何范围?我该怎么做?
你们能给我一个适当的例子吗?如何在使用java的网页中找到超链接?

我需要得到页面中所有的链接,我需要保存在数据库中,所有域名的链接

+0

http://stackoverflow.com/questions/3368618/how-to-find-urls-in-html-using-java/3368634#3368634 – bakkal 2010-08-01 18:15:39

回答

5

尝试使用jsoup library

下载项目罐子并编译此代码段:

Document doc = Jsoup.parse(new URL("http://www.bits4beats.it/"), 2000); 

    Elements resultLinks = doc.select("a"); 
    System.out.println("number of links: " + resultLinks.size()); 
    for (Element link : resultLinks) { 
     System.out.println(); 
     String href = link.attr("href"); 
     System.out.println("Title: " + link.text()); 
     System.out.println("Url: " + href); 
    } 

,代码将打印HTML页面的超文本元素和相关信息对他们的号码。

+0

这绝对是一种方式。使用真正的HTML解析器/提取器。 – BalusC 2010-08-03 19:27:07

3

最好的办法是使用一些HTML解析器库,但如果你不希望使用任何这样的第三方库可能会尝试通过使用来自regex包的Java的模式和匹配器类与正则表达式匹配来实现此目的。

编辑 实施例:

String regex="\\b(?<=(href=\"))[^\"]*?(?=\")"; 
Pattern pattern = Pattern.compile(regex); 

Matcher m = pattern.matcher(str_YourHtmlHere); 
while(m.find()) { 
    System.out.println("FOUND: " + m.group()); 
} 

在上面的例子是一个简单的基本的正则表达式,其会发现由属性所指示的href所有链接。您可能需要提高正则表达式正确处理所有的场景,如在单引号网址HREF等

+0

THKS的信息,你能不能给我任何的例子吗? – 2010-08-01 18:15:09

+0

编辑添加示例 – Gopi 2010-08-01 18:44:31

+0

你能给我完整的例子,如添加导入等 – 2010-08-02 12:35:52

5

可以使用的javax.swing.text.html和javax.swing.text.html.parser包来实现这一目标:

import java.io.*; 
import java.net.URL; 
import java.util.Enumeration; 

import javax.swing.text.MutableAttributeSet; 
import javax.swing.text.html.*; 
import javax.swing.text.html.parser.*; 

public class Test { 
    public static void main(String[] args) throws Exception { 
     Reader r = null; 

     try { 
     URL u = new URL(args[0]); 
     InputStream in = u.openStream(); 
     r = new InputStreamReader(in); 

     ParserDelegator hp = new ParserDelegator(); 
     hp.parse(r, new HTMLEditorKit.ParserCallback() { 
      public void handleStartTag(HTML.Tag t, MutableAttributeSet a, int pos) { 
       // System.out.println(t); 
       if(t == HTML.Tag.A) { 
        Enumeration attrNames = a.getAttributeNames(); 
        StringBuilder b = new StringBuilder(); 
        while(attrNames.hasMoreElements()) { 
         Object key = attrNames.nextElement(); 
         if("href".equals(key.toString())) { 
          System.out.println(a.getAttribute(key)); 
         } 
        } 
       } 
      } 
     }, true); 
     }finally { 
     if(r != null) { 
      r.close(); 
     } 
     } 
    } 
} 

编译并调用它是这样的:

java Test http://www.oracle.com/technetwork/java/index.html 
+0

@Naikus:它不工作,它显示“找到了A标签!!! a”,它没有显示HTML – 2010-08-02 12:27:30

+0

@Naikus:对不起没有HTML,没有显示链接 – 2010-08-02 12:35:16

+1

@Alex马修我已经更新的代码在我的答案上显示“”标签 – naikus 2010-08-02 13:20:38

0
Pattern p = Pattern.compile("(https?://([-\\w\\.]+)+(:\\d+)?(/([\\w/_\\.]*(\\?\\S+)?)?)?)"); 

    Matcher m = p.matcher(br.toString()); 


    while (m.find() == true) { 

     resp.getWriter().print("<a href="+m.group(0).toString()+">"+m.group(0).toString()+"</a><br/>"); 
     } 
相关问题