jsoup爬取网页数据

###使用jsoup

导入依赖:

compile ‘org.jsoup:jsoup:1.10.3’

###使用Jsoup解析 果壳网 -> 小组 的数据

  1. 请求网络需要异步进行;
  2. 注意申请权限;
  3. 使用Jsoup.connect()方法需要抛异常;
  4. 解析果壳网:
  • 首先链接需要解析的网址,使用Jsoup的connect()方法:
//http://www.guokr.com/group/
        Document document = Jsoup.connect("http://www.guokr.com/group/").get();
        //System.out.println(document);
        Log.e(TAG, "parsingGuoKr: 标题" + document.title());//获取标题
  • getElementsByClass()方法查找class中的元素,通常返回一个Elements集合;
    //通过class查找元素
    Elements titles = document.getElementsByClass("titles");
  • 通过first()方法获取集合中的第一个元素:
    //第一个titles中的所有元素
    Element l1 = titles.first();
  • 通过getElementsByTag()方法获取标签;
    //获取所有的li标签
    Elements li = titles.first().getElementsByTag("li");//获取所有的li标签
  • 遍历Elements数组,获取每一个title-link块中的标题:
for (Element e : li) {
    //获取到title-link元素集,再获取第一个元素
    Element elementsByClass = e.getElementsByClass("title-link").first();
    ...
  • 使用after()方法获取标签中的内容,返回Element;
  • 使用text()方法获取文本;
  • 使用arrt();方法获取超链接;
    ...
    //找到a标签   再获取文本
    Element titleA = elementsByClass.after("a");
    System.out.println("标题" + titleA.text());
    System.out.println("标题的超链接" + titleA.attr("href"));
}
  • 获取Elements的超链接:
    ...
    Elements title_imgs = e.getElementsByClass("title-imgs");
    for (Element imgs:title_imgs) {
        Elements title_img = imgs.getElementsByClass("title-img");
        Elements a = title_img.after("a");

        for (Element ima : a) {
            String aStr = ima.toString();
            int i1 = aStr.indexOf("(");
            int i2 = aStr.indexOf(")");
            System.out.println(aStr.substring(i1+1,i2));
        }
}

###直接解析String类型Html数据:

  • Html.fromHtml(pStr)方法,返回String类型;
 final TextView tv = (TextView) findViewById(R.id.tv);
        Document document = Jsoup.connect("http://www.guokr.com/post/794784/").get();
        Element gbbcode_content = document.getElementsByClass("gbbcode-content").first();

        final String pStr = gbbcode_content.getElementsByTag("p").toString();
        System.out.println(pStr);

        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                tv.setText(Html.fromHtml(pStr));
            }
        });

你可能感兴趣的:(Android学习之路)