Jsoup是一个网页分析工具,即把html转换成Java对象,在实现爬虫,或者网页分析时经常会用到。所以干脆写个总结。
常用的方法如下:
列如想进行全站遍历查找网站中带有href属性// 的a标签可以使用以下代码进行查找:
public class Main {
private static final String baseUrl = "http://www.xxxx.com";
private static List<String> handleUrl;
public static void main(String[] args) {
handleUrl = new ArrayList<String>();
check(baseUrl + "/");
}
/**
* 构建url
* @param str
* @param curr
* @return
*/
private static String buildUrl(String str, String curr) {
if (str.startsWith("/")) {
return baseUrl + str;
} else if (str.startsWith("http://") || str.startsWith("https://")) {
return str;
} else {
return curr + "/" + str;
}
}
public static void check(String url) {
if (handleUrl.contains(url)) {
return;
}
handleUrl.add(url);
System.out.println(">" + url);
try {
//请求网络得到Document
Document document = Jsoup.connect(url).get();
Element bodyElement = document.body();
Elements aElements = bodyElement.getElementsByTag("a");
for (Element element : aElements) {
String href = element.attr("href");
System.out.println("--->" + href);
if (href == null || href.startsWith("#")) {
continue;
}
//站外跳过
if ((href.startsWith("http://") || href.startsWith("https://")) && !href.startsWith(baseUrl))
continue;
if (href.replace(" ", "").equals("")) {
continue;
}
if (href.lastIndexOf("//") > 0) {
System.err.println(url + " 匹配到【//】");
continue;
}
String mUrl = buildUrl(href, url);
if (handleUrl.contains(mUrl))
continue;
check(mUrl);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}