爬虫

今天看到\(Jsoup\)这个这个爬虫包,貌似使用率挺广的,我也拿来练练手。刚开始用的有点蒙蔽😂,主要还是不太懂\(JavaScript\)的代码,有点费时。


一、获取HTML内容

首先肯定要获取目标主机的Http响应,Jsoup包也对此做了封装处理。

// 直接输入目标url地址就行
Document document = Jsoup.parse(new URL(String urlString), timeOutMills); 

这里我没有使用这个自带封装方法,使用了java.net下的自带的连接方式来获取html字符串。

/**
 * 获取目标HTML页面资源
 *
 * @param urlPath 目标url地址
 * @return 以String方式返回页面的HTML
 * @throws IOException
 */
public static String getHtmlResponse(String urlPath) throws IOException {
    // StringBuilder字符串连接提升效率
    StringBuilder sb = new StringBuilder();
    // 1. 新建URL
    URL targetURL = new URL(urlPath);
    // 2. 进行连接
    URLConnection conn = targetURL.openConnection();
    conn.connect();
    // 根据实际情况调整为utf-8或GBK
    InputStreamReader reader = new InputStreamReader(conn.getInputStream(), "GBK"); 
    BufferedReader br = new BufferedReader(reader);

    String line;
    while ((line = br.readLine()) != null) {
        sb.append(line);
        sb.append("\n");
    }
    return sb.toString();
}

二、解析HTML内容

/**
 * 利用Jsoup解析 HTML 内容
 *
 * @param htmlResource HTML to parse
 */
public static void getContent(String htmlResource) {
    Document document = Jsoup.parse(htmlResource);
    Element goods = document.getElementById("search_nature_rg");
    Elements lists = goods.getElementsByTag("li");
    for (Element e : lists) {
        //title
        String title = e.getElementsByTag("a").attr("title");
        System.out.println(title);
        // price
        String priceNow = e.getElementsByClass("search_now_price").text();
        Object pricePrevious = e.getElementsByClass("search_pre_price").text();

        System.out.printf("现价: %s\t原价: %s\n", priceNow, pricePrevious);
        System.out.println("=================================================");
    }
}

/* 测试结果:
    Java从入门到精通(第5版)
    现价: ¥62.10	原价: ¥69.80
    =================================================
    Java核心技术 卷I 基础知识(原书第11版)
    现价: ¥101.30	原价: ¥149.00
    =================================================
    深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)
    现价: ¥91.40	原价: ¥129.00
    =================================================
*/
posted @ 2021-01-20 21:52  Maverickos  阅读(54)  评论(0编辑  收藏  举报