【问题标题】:Get the list of all URLs on the website using Java [closed]使用 Java 获取网站上所有 URL 的列表 [关闭]
【发布时间】:2019-11-23 19:20:28
【问题描述】:

有很多库(例如 Jsoup)可以一次性完成这项任务,但是我如何在不使用任何外部库的情况下使用 Java 获取任何网站的 HTML 内容中存在的所有 URL ?

编辑1:谁能解释scanner.useDelimiter("\Z") 的实际作用以及scanner.useDelimiter("\Z") 和scanner.useDelimiter("\z") 之间的区别。

【问题讨论】:

  • 可能对你没用,但对刚开始的人有用。
  • 欢迎来到 SO! @AbhinavMaurya,Jens 的观点是,这是一个非常广泛的问题,很难以 SO 格式以有用的方式回答。请参阅how to ask 一个好问题。

标签: java spring web-scraping web-crawler java.util.scanner


【解决方案1】:

我正在回答我自己的问题,因为我试图在 StackOverflow 上找到准确的答案,但找不到。

代码如下:

URL url;
ArrayList<String> finalResult = new ArrayList<String>();

try {
    String content = null;
    URLConnection connection = null;
    try {
        connection = new URL("https://yahoo.com").openConnection();
        Scanner scanner = new Scanner(connection.getInputStream());
        scanner.useDelimiter("\\Z");
        content = scanner.next();
        scanner.close();
        } catch (Exception ex) {
              ex.printStackTrace();
        }



    String regex = "(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]";

    Pattern p = Pattern.compile(regex);
    Matcher m = p.matcher(content);
    while (m.find()) {
    if(!finalResult.contains((m.group())))
      finalResult.add(m.group());
    }
} finally {
   for(String res: finalResult){
       System.out.println(res);
    }
}

【讨论】:

    【解决方案2】:

    您可以尝试使用正则表达式。 这是一个检查任何测试是否为 URL 的正则表达式示例。 https://www.regextester.com/96504.

    但我无法阻止自己说 Jsoup 适合这个。但它是一个外部库。

    【讨论】:

    猜你喜欢
    • 2020-07-12
    • 1970-01-01
    • 2010-10-25
    • 2013-12-04
    • 1970-01-01
    • 1970-01-01
    • 2018-09-12
    • 2018-09-05
    相关资源
    最近更新 更多