Jsoup HTML解析工具

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();
        }
    }
}

发表回复

CAPTCHAis initialing...