【问题标题】: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);
}
}