Jsoup解析HTML和Epub

今天学习一下用Jsoup解析Html网页和Epub文档

首先把Jsoup的jar包放入工程的libs文件夹下(jsoup jar包大家可以去github或者网上搜索下载)

我们解析的地址为csdn移动板块  点击打开链接http://mobile.csdn.net/

首先在MainActivity.class中添加如下代码:

//要解析的HTML地址
	private String url="http://mobile.csdn.net/";
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        parseHtml();
    }

我们打开 要解析的html网页分析一下页面源码

网页内容:

下面看一下它的源码:

我们要解析出文章的标题 就要找到文章列表开始的标签 图中第一个红框标识的位置<div class="unit">就是文章列表的开始标签(不太明白的同学可以先了解一下html的基本知识),所以此处我们用Elements elements=doc.select("div.unit")来获取要解析的标签,然后用element.getElementsByTag("h1").first().text()方法获取文章标题,用element.getElementsByTag("h1").first().getElementsByTag("a").first().attr("src")获取<h1>标签下<a>标签后的链接,具体代码如下:

/**
	 * 解析HTML
	 */
	private void parseHtml() {
		new Thread(){
			public void run() {
				try {
					//GET方法请求数据
					Document doc=Jsoup.connect(url).get();
					//选择要解析的元素标签
					Elements elements=doc.select("div.unit");
					for (Element element : elements) {
						String title=element.getElementsByTag("h1").first().text();
						String href=element.getElementsByTag("h1").first().getElementsByTag("a").first().attr("src");
						Message msg=new Message();
						msg.obj=(title+"--"+href);
						msg.what=1;
						mHandler.sendMessage(msg);
					}
				} catch (IOException e) {
					e.printStackTrace();
				}
			};
		}.start();
	}

由于网络连接解析数据属于耗时操作,此处我们放在子线程中操作,获取到数据后我们发送消息给主线程,在MainActivity.class添加如下代码接收子线程发来的消息:

private Handler mHandler=new Handler(){
		public void handleMessage(android.os.Message msg) {
			if (msg.what==1) {
				String str=msg.obj.toString();
				Toast.makeText(getBaseContext(), str, Toast.LENGTH_SHORT).show();
				System.out.println("--str--"+str);
			}
		};
	};

然后在清单文件中添加网络权限:

<uses-permission android:name="android.permission.INTERNET"/>

运行,控制台输出以下内容:

Html网页解析成功,下面我们解析Epub文档:

要解析的事先下好的Epub文件放入assets文件夹下:

由于和解析html几乎相同,这里就直接列出代码:

在MainActivity.class添加如下方法:

/**
	 * 解析Epub
	 */
	private void parseEpub(){
		try {
			//打开文件
			InputStream is=getAssets().open("fb.ncx");
			int size=is.available();
			byte buffer[]=new byte[size];
			is.read(buffer);
			is.close();
			String epubType=new String(buffer,"utf-8");
			Document doc=Jsoup.parse(epubType);
			String doctitle=doc.getElementsByTag("docTitle").first().text();
			Elements elements=doc.getElementsByTag("navPoint");
			for (Element element : elements) {
				String title=element.text();
				String href=element.getElementsByTag("content").attr("href");
				Message msg=new Message();
				msg.obj=title+"=="+href;
				msg.what=1;
				mHandler.sendMessage(msg);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

然后在onCreate()中调用此方法,运行后得到以下结果:




至此,完成html和epub的解析:

全部代码如下:

public class MainActivity extends Activity {

	//要解析的HTML地址
	private String url="http://mobile.csdn.net/";
	
	private Handler mHandler=new Handler(){
		public void handleMessage(android.os.Message msg) {
			if (msg.what==1) {
				String str=msg.obj.toString();
				Toast.makeText(getBaseContext(), str, Toast.LENGTH_SHORT).show();
				System.out.println("--str--"+str);
			}
		};
	};
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		//parseHtml();
		parseEpub();
	}

	/**
	 * 解析HTML
	 */
	private void parseHtml() {
		new Thread(){
			public void run() {
				try {
					//GET方法请求数据
					Document doc=Jsoup.connect(url).get();
					//选择要解析的元素标签
					Elements elements=doc.select("div.unit");
					for (Element element : elements) {
						String title=element.getElementsByTag("h1").first().text();
						String href=element.getElementsByTag("h1").first().getElementsByTag("a").first().attr("src");
						Message msg=new Message();
						msg.obj=(title+"--"+href);
						msg.what=1;
						mHandler.sendMessage(msg);
					}
				} catch (IOException e) {
					e.printStackTrace();
				}
			};
		}.start();
	}

	/**
	 * 解析Epub
	 */
	private void parseEpub(){
		try {
			//打开文件
			InputStream is=getAssets().open("fb.ncx");
			int size=is.available();
			byte buffer[]=new byte[size];
			is.read(buffer);
			is.close();
			String epubType=new String(buffer,"utf-8");
			Document doc=Jsoup.parse(epubType);
			String doctitle=doc.getElementsByTag("docTitle").first().text();
			Elements elements=doc.getElementsByTag("navPoint");
			for (Element element : elements) {
				String title=element.text();
				String href=element.getElementsByTag("content").attr("href");
				Message msg=new Message();
				msg.obj=title+"=="+href;
				msg.what=1;
				mHandler.sendMessage(msg);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
}

欢迎关注微博,互相交流技术! 点击这里关注http://weibo.com/momo91



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值