2010-10-06 103 views
3

我如何在网页中获取链接而不加载链接? (基本上我想要的是这样的,一个用户输入一个URL,我想加载该URL中的所有可用链接。)你能告诉我一种方法来实现这个在网站上获取链接

+2

你是什么意思没有加载它?你必须至少获取URL的内容并以某种方式处理它们 – 2010-10-06 15:47:39

+0

@SB我认为他的意思是说,他不想让所有超链接的GET请求 – 2010-10-06 15:52:39

+0

这就是它的工作原理。一个用户来到并输入一个URL,我得到该URL内的所有链接。然后我做一些处理并向用户显示一些结果。不加载意味着用户不应该看看他的URL是否被加载(它可以加载但不应该显示给用户) – netha 2010-10-06 15:57:04

回答

0

你必须加载页面你的服务器,然后找到链接,最好通过在HTML/XML解析器中加载文档并遍历该DOM。然后服务器可以将链接发送回客户端。

您无法在客户端上执行此操作,因为浏览器不会让您的Javascript代码查看来自不同域的页面内容。

+1

你可以给我代码示例或任何链接到资源,我可以研究一下它 – netha 2010-10-06 16:09:20

+0

它完全取决于你有什么样的服务器端环境。有很多种可能性。 – Pointy 2010-10-06 16:50:52

0

如果你想要一个页面的内容,你必须加载它。但是你可以做的是将其加载到内存中并解析它以获取所有<a>标签及其内容。

如果您使用java(如您的标记所述)或者使用带有JavaScript的简单DOM工具,您将能够使用JDomSax等工具解析此XML。


资源:

关于同一主题:

+0

请记住,很多网站不会解析为'有效'的XML ...... – Paddy 2010-10-06 15:51:28

+0

@ Paddy,您是对的,在这种情况下,最好的办法是手动查找' 2010-10-06 15:52:43

0

只要打开一个URLConnection,获取页面并解析它。

2

Here is example Java code,具体如下:

import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.Reader; 
import java.net.URL; 

import javax.swing.text.MutableAttributeSet; 
import javax.swing.text.html.HTML; 
import javax.swing.text.html.HTMLEditorKit; 
import javax.swing.text.html.parser.ParserDelegator; 

public class Main { 
    public static void main(String args[]) throws Exception { 
    URL url = new URL(args[0]); 
    Reader reader = new InputStreamReader((InputStream) url.getContent()); 
    System.out.println("<HTML><HEAD><TITLE>Links for " + args[0] + "</TITLE>"); 
    System.out.println("<BASE HREF=\"" + args[0] + "\"></HEAD>"); 
    System.out.println("<BODY>"); 
    new ParserDelegator().parse(reader, new LinkPage(), false); 
    System.out.println("</BODY></HTML>"); 
    } 
} 

class LinkPage extends HTMLEditorKit.ParserCallback { 

    public void handleStartTag(HTML.Tag t, MutableAttributeSet a, int pos) { 
    if (t == HTML.Tag.A) { 
     System.out.println("<A HREF=\"" + a.getAttribute(HTML.Attribute.HREF) + "\">" 
      + a.getAttribute(HTML.Attribute.HREF) + "</A><BR>"); 
    } 
    } 

} 
+0

@Netha,你可以发布整个堆栈跟踪, – 2010-10-07 18:25:24

0
public void extract_link(String site) 
{ 
    try { 
     List<String> links = extractLinks(site); 
     for (String link : links) { 
      System.out.println(link); 
     } 

    } catch (Exception e) { 
     System.out.println(e); 
    } 
} 

这是一个简单的函数来查看页面中的所有链接。 如果你想查看内部链接的链接,只需递归调用它(但要确保根据需要给出限制)。