Jsoup初探

  • jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。

  • 下载地址:jsoup-1.11.2.jar

  • jsoup中文文档:http://www.open-open.com/jsoup/

一个小实例:(获取:鸡病专业网 每日鸡蛋价格汇总)

import java.io.IOException;
import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class GetWebContent {

    public static final String url = "http://www.jbzyw.com";

    /**
     * 获取网页源码
     * 
     * @param url
     */
    public static Document getDocument(String url) {
        Connection conn = null;
        Document doc = null;
        // 有的抓取会报错403.解决方法:设置header,模仿浏览器访问。
        try {
            conn = Jsoup.connect(url).timeout(1000 * 60);
            conn.header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
            conn.header("Accept-Encoding", "gzip, deflate, sdch");
            conn.header("Accept-Language", "zh-CN,zh;q=0.8");
            conn.header("User-Agent",
                    "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36");
            doc = conn.get();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return doc;
    }

    public static void main(String[] args) {
        // 获取网页源码
        Document doc = getDocument(url);
        // 查看布局,解析页面,定位需要的数据
        Element content = doc.getElementById("tab02");// 根据id获取对象
        Elements links = content.getElementsByTag("a");// 根据‘标签’获取对象集
        // 遍历Elements
        for (Element link : links) {
            String href = link.attr("href");// 获取某一属性
            String title = link.attr("title");// 获取某一属性
            if (title.contains("汇总")) {
                Document desc = getDocument(url + href);

                Elements contents = desc.getElementsByClass("content");// 根据class获取对象集
                Element contentItem = contents.get(0);
                Elements contentdDIV = contentItem.getElementsByTag("div");// 根据‘标签’获取对象集
                Elements contentdImg = contentItem.getElementsByTag("img");// 根据‘标签’获取对象集

                // 走势图
                if (contentdImg.size() > 0 && !contentdImg.get(0).attr("src").contains("http:")) {
                    System.out.println(url + contentdImg.get(0).attr("src"));
                }

                // content-文本
                System.out.println(title);
                String[] prices = contentdDIV.get(0).text().split(" ");
                for (String price : prices) {
                    if (price.contains("地区")) {
                        System.out.println(price);
                    }
                }
            }
        }
    }

}
posted @ 2018-02-01 17:02  游园拾忆  阅读(38)  评论(0编辑  收藏  举报