Table of Contents
1. Using javax.swing.text.html.HTMLEditorKit
import java.io.IOException;
import java.io.FileReader;
import java.io.Reader;
import java.util.List;
import java.util.ArrayList;
import javax.swing.text.html.parser.ParserDelegator;
import javax.swing.text.html.HTMLEditorKit.ParserCallback;
import javax.swing.text.html.HTML.Tag;
import javax.swing.text.html.HTML.Attribute;
import javax.swing.text.MutableAttributeSet;
public class HTMLUtils {
private HTMLUtils() {}
public static List<String> extractLinks(Reader reader) throws IOException {
final ArrayList<String> list = new ArrayList<String>();
ParserDelegator parserDelegator = new ParserDelegator();
ParserCallback parserCallback = new ParserCallback() {
public void handleText(final char[] data, final int pos) { }
public void handleStartTag(Tag tag, MutableAttributeSet attribute, int pos) {
if (tag == Tag.A) {
String address = (String) attribute.getAttribute(Attribute.HREF);
list.add(address);
}
}
public void handleEndTag(Tag t, final int pos) { }
public void handleSimpleTag(Tag t, MutableAttributeSet a, final int pos) { }
public void handleComment(final char[] data, final int pos) { }
public void handleError(final java.lang.String errMsg, final int pos) { }
};
parserDelegator.parse(reader, parserCallback, false);
return list;
}
public final static void main(String[] args) throws Exception{
FileReader reader = new FileReader("java-new.html");
List<String> links = HTMLUtils.extractLinks(reader);
for (String link : links) {
System.out.println(link);
}
}
}
2. Using an HTML parser
In this HowTo, I will use the OpenSource package Jsoup.
import java.io.IOException;
import java.util.List;
import java.util.ArrayList;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class HTMLUtils {
private HTMLUtils() {}
public static List<String>extractLinks(String url) throws IOException {
final ArrayList<String> result = new ArrayList<String>();
Document doc = Jsoup.connect(url).get();
Elements links = doc.select("a[href]");
Elements media = doc.select("[src]");
Elements imports = doc.select("link[href]");
// href ...
for (Element link : links) {
result.add(link.attr("abs:href"));
}
// img ...
for (Element src : media) {
result.add(src.attr("abs:src"));
}
// js, css, ...
for (Element link : imports) {
result.add(link.attr("abs:href"));
}
return result;
}
public final static void main(String[] args) throws Exception{
String site = "http://www.rgagnon.com/topics/java-language.html";
List<String> links = HTMLUtils.extractLinks(site);
for (String link : links) {
System.out.println(link);
}
}
}
Done! Happy Coding!
Related posts:
Java Program to Find the Peak Element of an Array O(n) time (Naive Method)
Java Program to Check the Connectivity of Graph Using DFS
Spring Boot with Multiple SQL Import Files
The Difference Between map() and flatMap()
Java Program to Implement Ternary Tree
Java Program to Implement Suffix Array
Debug a HttpURLConnection problem
Java Program to Implement Ford–Fulkerson Algorithm
Deploy a Spring Boot WAR into a Tomcat Server
Java Program to Generate All Possible Combinations of a Given List of Numbers
Java – Write a Reader to File
Java Program to Perform Preorder Recursive Traversal of a Given Binary Tree
Java Program to Implement Merge Sort Algorithm on Linked List
Send email with authentication
Object cloning trong java
Primitive Type Streams in Java 8
Introduction to Spliterator in Java
Spring Boot - Database Handling
Java Program to Check Whether a Weak Link i.e. Articulation Vertex Exists in a Graph
Java Program to Find the Nearest Neighbor Using K-D Tree Search
XML-Based Injection in Spring
A Quick Guide to Spring Cloud Consul
Using a List of Values in a JdbcTemplate IN Clause
Concurrent Test Execution in Spring 5
Java Program to Perform Postorder Recursive Traversal of a Given Binary Tree
Java Program to Implement the linear congruential generator for Pseudo Random Number Generation
Java Program to Implement Graph Structured Stack
Java Program to Implement RenderingHints API
Java Program to Encode a Message Using Playfair Cipher
Java Program to Perform Searching Using Self-Organizing Lists
Removing all Nulls from a List in Java
How to Store Duplicate Keys in a Map in Java?