jsoup爬取网页数据

来源:互联网 发布:美的网络专供 代码 编辑:程序博客网 时间:2024/05/17 03:36

使用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));            }        });
原创粉丝点击