使用jsoup进行网页内容抓取

对网页内容的抓取比较的感兴趣,于是就简单的学习了一下,如果不使用任何的框架去抓取网页的内容,感觉有点难度,我就简单点来吧,这里所使用的jsoup框架,抓取网页的内容与使用jquery选择网页的内容差不多,上手很快。下面就简单的介绍一下吧!

首先是获取网络资源的方法:

    /**
     * 获取网络中的超链接
     * 
     * @param urlStr
     *            传入网络地址
     * @return 返回网页中的所有的超链接信息
     */
    public String getInternet(String urlStr, String encoding) {
        URL url = null;
        URLConnection conn = null;
        String nextLine = null;
        StringBuffer sb = new StringBuffer();
        // 设置系统的代理信息
        Properties props = System.getProperties();
        props.put("proxySet", "true");
        props.put("proxyHost", "10.27.16.212");
        props.put("proxyPort", "3128");
        System.setProperties(props);
        try {
            // 获取网络资源
            url = new URL(urlStr);
            // 获取资源连接
            conn = url.openConnection();
            conn.setReadTimeout(30000);//设置30秒后超时
            conn.connect();
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    conn.getInputStream(), encoding));
            // 开始读取网页信息获取网页中的超链接信息
            while ((nextLine = reader.readLine()) != null) {
                sb.append(nextLine);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        return sb.toString();

    }

我们在获取了网络资源之后,我们就可以根据自己的需求筛选出对自己有用的资源了,下面开始抓取资源:

public static void main(String[] args) {
        MavenTest test = new MavenTest();
        try {

            String html = test.getInternet(    "http://www.weather.com.cn/html/weather/101020100.shtml#7d","UTF-8");
            //将html文档转换为Document文档
            Document doc = Jsoup.parse(html);
            //获取class为.weatherYubaoBox的div的元素
            Elements tableElements = doc.select("div.weatherYubaoBox");
//            System.out.println(tableElements.html());
            //获取所有的th元素
            Elements thElements = tableElements.select("th");
            //打印出日期的标题信息
            for (int i = 0; i < thElements.size(); i++) {
                System.out.print("                "+thElements.get(i).text() + "\t");
            }
            // 输出标题之后进行换行
            System.out.println();
            //获取表格的tbody
            Elements tbodyElements = tableElements.select("tbody");
            for (int j = 1; j < tbodyElements.size(); j++) {
                //获取tr中的信息
                Elements trElements = tbodyElements.get(j).select("tr");
                for (int k = 0; k < trElements.size(); k++) {
                    //获取单元格中的信息
                    Elements tdElements = trElements.get(k).select("td");
                    //根据元素的多少判断出白天和夜晚的
                    if (tdElements.size() > 6) {
                        for (int m = 0; m < tdElements.size(); m++) {
                            System.out.print(tdElements.get(m).text() + "\t");
                        }
                        // 白天的数据打印完成后进行换行
                        System.out.println();
                    }else{
                        for(int n =0; n < tdElements.size(); n++){
                            System.out.print("\t"+tdElements.get(n).text());
                        }
                        //打印完成夜间的天气信息进行换行处理
                        System.out.println();
                    }
                }

            }

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

运行的结果如下:

最后附上框架的地址:http://www.open-open.com/jsoup/selector-syntax.htm

posted @ 2014-01-08 15:04  唐凯  阅读(741)  评论(0编辑  收藏  举报