使用 Java 获取网站上所有 URL 的列表
Get the list of all URLs on the website using Java
有很多库(例如 Jsoup)可以一次性完成这项任务,但是我如何使用 Java 获取任何网站的 HTML 内容中存在的所有 URL,而不使用任何外部库?
编辑 1:谁能解释 scanner.useDelimiter("\Z") 的实际作用以及 scanner.useDelimiter("\Z") 和 scanner.useDelimiter(" \z").
您可以尝试使用正则表达式。
这是一个 regEx 的示例,它检查任何测试是否为 URL。
https://www.regextester.com/96504.
但我无法阻止自己说 Jsoup 适合这个。但它是一个外部图书馆。
我正在回答我自己的问题,因为我试图在 Whosebug 上找到准确的答案,但找不到。
代码如下:
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);
}
}
有很多库(例如 Jsoup)可以一次性完成这项任务,但是我如何使用 Java 获取任何网站的 HTML 内容中存在的所有 URL,而不使用任何外部库?
编辑 1:谁能解释 scanner.useDelimiter("\Z") 的实际作用以及 scanner.useDelimiter("\Z") 和 scanner.useDelimiter(" \z").
您可以尝试使用正则表达式。 这是一个 regEx 的示例,它检查任何测试是否为 URL。 https://www.regextester.com/96504.
但我无法阻止自己说 Jsoup 适合这个。但它是一个外部图书馆。
我正在回答我自己的问题,因为我试图在 Whosebug 上找到准确的答案,但找不到。
代码如下:
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);
}
}