【问题标题】:get links in a web site获取网站中的链接
【发布时间】:2011-04-21 22:03:50
【问题描述】:

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

【问题讨论】:

  • 不加载是什么意思?您至少必须获取 URL 的内容并以某种方式处理它们
  • @SB 我认为他的意思是,他不想向所有超链接发出 GET 请求
  • 这就是它的工作原理。一个用户来输入一个 URL,我得到该 URL 中的所有链接。然后我做一些处理并向用户显示一些结果。不加载意味着用户不应该看到他的 URL 是否正在加载。(它可以加载但不应该向用户显示)
  • @netha,首先,您使用的是 java 还是 javascript?这根本不是一回事。
  • 我很乐意使用 javascript 获取链接。但如果这是不可能的,那么我不介意从 java 获取它们

标签: java javascript url hyperlink


【解决方案1】:

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

}

【讨论】:

  • @Netha,你能发布整个堆栈跟踪吗,
【解决方案2】:

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

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

【讨论】:

  • 你能给我代码示例或任何我可以研究一下的资源链接吗
  • 这完全取决于你拥有什么样的服务器端环境。有很多很多的可能性。
【解决方案3】:

如果您想要页面的内容,您必须加载它。但是你可以做的是将它加载到内存中并解析它以获得所有&lt;a&gt;标签及其内容。

如果您正在使用 java(正如您的标签所说)或使用带有 javascript 的简单 DOM 工具,您将能够使用 JDomSax 等工具解析此 XML。


资源:

关于同一主题:

【讨论】:

  • @Paddy,你是对的,在这种情况下,最好的办法是手动查找 &lt;a 标签。
【解决方案4】:

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

【讨论】:

    【解决方案5】:
    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);
        }
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-28
      • 2020-06-30
      • 2013-08-03
      • 1970-01-01
      • 2022-12-18
      • 2011-05-19
      • 1970-01-01
      • 2023-03-08
      相关资源
      最近更新 更多