使用JSOUP实现网络爬虫

  最近想做一个app,没什么思路,网上看了,想做一个图片浏览的,可是没有数据呀,想到了网上比较火的网络爬虫,实现方式有很多种,这里选择了Jsoup。想到爬虫,还想到了网上有收费的什么电子书呀等等这些,那我是不是也可以通过爬虫来获取数据呢?当然,这里说的是一些比较low的网站,好的网站是很难有机会的,但也说明是技术不到家。
  好了,下面进入今天的正题。
  jsoup 是一款 Java 的HTML 解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于JQuery的操作方法来取出和操作数据。
  jsoup的主要功能如下:
  * 从一个URL,文件或字符串中解析HTML;
  * 使用DOM或CSS选择器来查找、取出数据;
  * 可操作HTML元素、属性、文本;
  如果对jsoup不熟悉,请移步http://jsoup.org/ ,我也是看别人的文章学习的,如有侵权,请联系我。
  这里贴一下我用到的 Java工程的测试代码 

package com.javen.Jsoup;
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class JsoupTest {
    static String url="http://www.cnblogs.com/zyw-205520/archive/2012/12/20/2826402.html";
    /**
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception {

        // TODO Auto-generated method stub
        BolgBody();
        //test();
        //Blog();
        /*
         * Document doc = Jsoup.connect("http://www.oschina.net/")
         * .data("query", "Java") // 请求参数 .userAgent("I ’ m jsoup") // 设置
         * User-Agent .cookie("auth", "token") // 设置 cookie .timeout(3000) //
         * 设置连接超时时间 .post();
         */// 使用 POST 方法访问 URL

        /*
         * // 从文件中加载 HTML 文档 File input = new File("D:/test.html"); Document doc
         * = Jsoup.parse(input,"UTF-8","http://www.oschina.net/");
         */
    }

    /**
     * 获取指定HTML 文档指定的body
     * @throws IOException
     */
    private static void BolgBody() throws IOException {
        // 直接从字符串中输入 HTML 文档
        String html = "<html><head><title> 开源中国社区 </title></head>"
                + "<body><p> 这里是 jsoup 项目的相关文章 </p></body></html>";
        Document doc = Jsoup.parse(html);
        System.out.println(doc.body());


        // 从 URL 直接加载 HTML 文档
        Document doc2 = Jsoup.connect(url).get();
        String title = doc2.body().toString();
        System.out.println(title);
    }

    /**
     * 获取博客上的文章标题和链接
     */
    public static void article() {
        Document doc;
        try {
            doc = Jsoup.connect("http://www.cnblogs.com/zyw-205520/").get();
            Elements ListDiv = doc.getElementsByAttributeValue("class","postTitle");
            for (Element element :ListDiv) {
                Elements links = element.getElementsByTag("a");
                for (Element link : links) {
                    String linkHref = link.attr("href");
                    String linkText = link.text().trim();
                    System.out.println(linkHref);
                    System.out.println(linkText);
                }
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
    /**
     * 获取指定博客文章的内容
     */
    public static void Blog() {
        Document doc;
        try {
            doc = Jsoup.connect("http://www.cnblogs.com/zyw-205520/archive/2012/12/20/2826402.html").get();
            Elements ListDiv = doc.getElementsByAttributeValue("class","postBody");
            for (Element element :ListDiv) {
                System.out.println(element.html());
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
            }
}

  下面来介绍android中使用Jsoup异步解析网页的数据

    // 爬取数据操作getData(PICTUREURL);// onCreate方法里面
    private void getData(final String pictureurl) {
        new Thread() {
            /**
             * @Title: run
             * @Description: (非 JavaDoc)
             * @see java.lang.Thread#run()
             */
            @Override
            public void run() {
                super.run();
                Connection c = Jsoup.connect(PICTUREURL);
                Document doc = null; // 只需先构建一个Jsoup的Document对象,然后就可以快速拿到网页的数据
                try {
                    doc = c.get();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                if (doc != null) {
                    Element div = doc.select("div.PictureList").first();
                    Elements ul = div.select("ul");
                    Elements li = div.select("li");
                    Elements a = div.select("a");
                    for (int i = 0; i < a.size(); i++) {
                        String h = a.get(i).attr("href");
                        String t = a.get(i).attr("title");
                        Elements img = a.select("img");
                        String s = img.get(i).attr("data-original");
                        Log.e("抓取---------------->", h + "==" + t + "==" + s
                                + "==" + img.toString());
                        // mPicturebean = new Picturebean.Img();
                        // mPicturebean.setHref(h);
                        // mPicturebean.setTitle(t);
                        // mPicturebean.setImg(s);
                        // list.add(mPicturebean);
                    }
                }
            }
        }.start();
    }

这里提供一下使用到的jar包
http://download.csdn.net/detail/u014727709/9704489

欢迎start,欢迎评论,欢迎指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想你依然心痛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值