Jsoup教程 :使用Jsoup 批量解析网页

    Jsoup是一个开源的DOM解析器,只要熟悉html和css一点知识,就知道怎么用,今天的例子是使用jsoup解析一个图片网站,然后输出一组图片的“缓存地址”,“真实地址”,“分辨率”的内容。在开始前,要先回顾一下基础知识。

  1. Jsoup的基本教程:http://jsoup.org/ ,下载导入即可,注意要记得抛出异常,我认为其中最重要的就是select的功能了
  2. CSS基础,其实我们只要知道这3个就可以了,class  对应的是 “.class”,id对应的是“#id”,tag对应的是"h1","p"等,这个可以用chrome的F12功能去实现
  3. http get的querystring的基础,这个在图片网站,图书馆等检索平台上都有很大的用处,这个同样可以用chrome的F12实现
以上3点,最好上w3cschool看一下,要不然没有底子,下面的也看不懂.现在开始具体的步骤。
首先,你要有个能解析的网页,我挑选了一个简单的网页:“http://konachan.com/post?page=4&tags=hentai_ouji_to_warawanai_neko”,其中“http://konachan.com/post”这个是基础的网页,然后“?page=4&tags=hentai_ouji_to_warawanai_neko”是querystring,在chrome F12,打开审查元素,选择Network,里面有详细的介绍,所以,代码这个写:
        //eg, http get is :http://konachan.com/post?page=4&tags=hentai_ouji_to_warawanai_neko
        final String BASEURL = "http://konachan.com/post";
        //TODO: set your own QUERY
        final String TAGS = "tags";
        final String PAGE = "page";
        String currentPage = "2";
        String currentTAGS = "hentai_ouji_to_warawanai_neko";
        try {
            Document document = Jsoup.connect(BASEURL)
                    .timeout(10000)
                    //?page=4&tags=hentai_ouji_to_warawanai_neko
                    .data(PAGE,currentPage,TAGS,currentTAGS)
                    .get();
                    .......

       这样,你就得到了DOM文档,解析前我们要想一想“解析后的图片”怎么放,我的方法是放到map里面,然后再放到list里面,这个用于以后写ListView
            List<Map<String,String>> imgs = new ArrayList<Map<String, String>>();
            Map<String,String> img = new HashMap<String, String>();

现在开始解析html,打开“审查元素”,我们发现要解析的是 <ul> <li/> .....<li/> </ul>的内容,如图

而展开了li,发现就是具体的每个图片对象了,所以,我们先搞到li对象 
            Elements lis = document.select("ul#post-list-posts li");
我们获得实质就是List<Element> 集合,通过这一步,我们得到一个List,它有15个元素,接下来,对每个元素进行解析,存放到map对象即可,只是些基础知识了
            for (int i = 0; i < lis.size(); i++) {
                Element imgpreview = lis.select("img.preview").get(i);
                Element largeimg = lis.select("a.directlink").get(i);
                Element resolution = lis.select("span.directlink-info").get(i);
                System.out.println(i + " imgpreview.attr(\"src\") = " + imgpreview.attr("src"));
                System.out.println("largeimg.attr(\"href\") = " + largeimg.attr("href"));
                System.out.println("resolution.text() = " + resolution.text());
                img.put("thumbimg",imgpreview.attr("src"));
                img.put("largeimg",largeimg.attr("href"));
                img.put("resolution",resolution.text());
                //TODO:to be uesd in ListView
                imgs.add(i,img);
            }

最后贴上完整代码:
/*
 * Copyright (c) 2014.
 * Author : leon
 * Feel free to ues it!
 */

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


public class Main
{
    public static void main(String args[])
    {
        //eg, http get is :http://konachan.com/post?page=4&tags=hentai_ouji_to_warawanai_neko
        final String BASEURL = "http://konachan.com/post";
        //TODO: set your own QUERY
        final String TAGS = "tags";
        final String PAGE = "page";
        String currentPage = "2";
        String currentTAGS = "hentai_ouji_to_warawanai_neko";
        try {
            Document document = Jsoup.connect(BASEURL)
                    .timeout(10000)
                    //?page=4&tags=hentai_ouji_to_warawanai_neko
                    .data(PAGE,currentPage,TAGS,currentTAGS)
                    .get();

            List<Map<String,String>> imgs = new ArrayList<Map<String, String>>();
            Map<String,String> img = new HashMap<String, String>();
            Elements lis = document.select("ul#post-list-posts li");
            System.out.println("lis.size() = " + lis.size());
            for (int i = 0; i < lis.size(); i++) {
                Element imgpreview = lis.select("img.preview").get(i);
                Element largeimg = lis.select("a.directlink").get(i);
                Element resolution = lis.select("span.directlink-info").get(i);
                System.out.println(i + " imgpreview.attr(\"src\") = " + imgpreview.attr("src"));
                System.out.println("largeimg.attr(\"href\") = " + largeimg.attr("href"));
                System.out.println("resolution.text() = " + resolution.text());
                img.put("thumbimg",imgpreview.attr("src"));
                img.put("largeimg",largeimg.attr("href"));
                img.put("resolution",resolution.text());
                //TODO:to be uesd in ListView
                imgs.add(i,img);
            }
        } catch (Exception e){
            e.printStackTrace();
        }
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值