获取网站中的链接

3

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


2
不加载它是什么意思?你至少需要获取URL的内容并对其进行处理。 - NG.
@SB 我想他的意思是,他不想对所有的超链接发出GET请求。 - jmj
1
@netha,首先,你是在使用Java还是JavaScript?这两者完全不同。 - Colin Hebert
我很乐意使用JavaScript获取链接。但如果不可能的话,我也不介意从Java获取它们。 - netha
我尝试了你的代码,但是它抛出了一个异常。"Exception in thread "main" java.net.SocketException: Network is unreachable:" - netha
显示剩余2条评论
5个回答

2

这里是Java代码示例,具体如下:

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

}

@Netha,请您发布完整的堆栈跟踪信息。 - jmj

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

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

0

您需要在服务器上加载页面,然后通过在HTML/XML解析器中加载文档并遍历DOM来查找链接。然后服务器可以将链接发送回客户端。

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


1
请问您能否给我提供一些代码示例或者任何资源链接,让我可以学习一下相关内容? - netha
这完全取决于你拥有的服务器端环境。有许多,许多可能性。 - Pointy

0

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

你可以使用像JDomSax这样的工具来解析这个XML,如果你正在使用Java(如你的标签所示),或者使用简单的DOM工具与JavaScript一起使用。


资源:

同一主题:


@Paddy,你说得对,在这种情况下,最好的做法是手动查看<a标签。 - Colin Hebert

0
只需打开一个URLConnection,获取页面并解析即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接