Jsoup解析HTML+Debug使用
2013-08-31 08:59
369 查看
前几天在论坛, 技术群里看见有人在讨论jsoup,开始不知道是个啥, 查看了下文档, 哦, 原来是解析HTML的个框架-架包吧;
jar包下载位置,使用说明文档等· :http://jsoup.org/download
然后自己就开始写写看, 解析下看看能够成功; 遂有了下文;开始天真的以为直接在主线程中解析即可,但是蛋碎的是·······报错了;那就异步吧-两种实现方式,见代码;
之前用过ntlm域验证的jar包,也是必须放置在异步任务里面匹配才能成功, 以后使用jar包,框架的时候要考虑到这一点;
按照惯例, 上几张图先一睹为快~~~~~~ 已解析成功
先整一个傻瓜布局, 用来作为解析入口;
![](http://img.blog.csdn.net/20130831081206046?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXVhbmppbjI0aw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20130831085245234?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXVhbmppbjI0aw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20130831081433109?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXVhbmppbjI0aw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
不能插入多张图片? 不会吧? 还有好多示意图呢··、 呵呵 算啦, 文字描述也一样; 昨晚3点多睡的觉, 今天一大早就醒了, 继续记录技术的点滴;
~~~~~~ 好啦 现在上代码~~~~~~
实现很简单, 一个异步任务完成下载, 没了
其实主要的是【数据分析】---看你请求过去返回的数据类型, 看其中的数据标签是什么,怎么看? 当然是Eclipse经典--debug啦!!! 有人说了, 我不会debug, 你没用过怎么知道自己不会?
断点--F6-watch; 搞定, 你没用过你就说自己不会debug? 呵呵 言辞有点过激、 继续 不知道还能不能上传示意图片了 蛋碎、
主要用到些编程习惯:
1.平时要尝试着用Java代码垒布局,静态拉几个xml页面谁不会······ 我们是全能型的Android开发者哈, 代码也要会垒~ 以后在【动态生成布局】的时候你就知道这个的重要性了, 单纯的xml是不能满足我们的需求的哈~~~
2.学会用异步任务, 而且要很熟练, 各种形式; 其实new Thread() { run() {} }.start();其实也行, 反正看个人习惯吧, runnable+handler也可以--我主要用这个来刷新UI展示动画渐变;
3.千万~~~千万~~~千万~~~千万~~~千万~~~要会用debug, 不想用的大哥大姐们, 我拜托你们了, 真的很爽的啊、
debug+命令行notepad-记事本 >= Log(有点夸张哈)··· 尤其是在接口调试的时候, 相当的关键,地位相当明显!!
继续上图、 不知道是否能上传的了························ 哎呦 还不错 还能继续上传、
![](http://img.blog.csdn.net/20130831082921421?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXVhbmppbjI0aw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
好的 , 如上图所示, 在左侧先来个breakpoint, 先别急着让它跑完; 右击-watch一下doc的标签背后携带的具体数据信息, 右上角的信息是不是很靓呀??????
其实没啥了, 这就是传说中的debug的熊样儿, 可爱吧、
此时我们可以如下操作:
1. #+R, 调出命令行,键入notepad, 调出记事本;
2. 将doc中的信息ctrl+A 而后ctrl+C复制到刚打开的记事本中,自己看看返回值的种种tag吧~~ 然后对应的进一步解析;
其实做这一步的目的是要确保有信息返回, 如果此处都是空的, 那么就没有执行下去的理由,从这里向上找原因; 这就叫错误定位吧、 呵呵
![](http://img.blog.csdn.net/20130831083629218?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXVhbmppbjI0aw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
好, 那么我们来看上图, f6之后, 执行到links, 我们如果想偷懒的话,可以不看左上角, 直接将鼠标放到要查看的标签上面即可,Eclipse自动将信息弹出来,自己点击查看即可;
我们不是来看热闹的哦, 俗话说··外行看热闹, 内行看门道的哈, 我们的目的是分析数据结构来提取我们想要的信息,
看到红框内的标签了不? 呵呵 对 就是它了···Elements links = doc.select("a[href]");
当提取到我们想要的信息的上一层时, 我们再继续查看当前标签下面的子标签····依次类推吧,若之前解析过XML、JSON的话, 这个是否似曾相识?
![](http://img.blog.csdn.net/20130831084212984?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXVhbmppbjI0aw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
我们的debug屡试不爽哈、 其实这个成语用在此处不合适, 屡试不爽--多次尝试不出差错 咱就看它字面意思好了 记录博客也是记录心情嘛 、
再看我们在傻瓜布局中最终要呈现的内容, 同样的招数, 称霸Eclipse界哈、 右上角--是真相;
好啦, 就先写这么多吧, 其实最主要的是知道这个jar包是什么, 做什么用的, 怎么用-语法/使用环境等, 具体的代码实现就顺水推舟了;
其实写这个博客, 主要是突然想到我当时不会、不懂用debug时候的囧相, 调试起来log一大堆, 无限被歧视,呵呵, 也算是自己成长的代价了,那就写出来好啦;异步任务当时也是不太懂, 现在写多了,成熟练工之后就不自然的理解跟明白了;还是要多想,多实现吧;
还是我最欣赏的那句话·············
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~唯有压力才能突破, 才能距破茧成蝶之日更近一步~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
jar包下载位置,使用说明文档等· :http://jsoup.org/download
然后自己就开始写写看, 解析下看看能够成功; 遂有了下文;开始天真的以为直接在主线程中解析即可,但是蛋碎的是·······报错了;那就异步吧-两种实现方式,见代码;
之前用过ntlm域验证的jar包,也是必须放置在异步任务里面匹配才能成功, 以后使用jar包,框架的时候要考虑到这一点;
按照惯例, 上几张图先一睹为快~~~~~~ 已解析成功
先整一个傻瓜布局, 用来作为解析入口;
不能插入多张图片? 不会吧? 还有好多示意图呢··、 呵呵 算啦, 文字描述也一样; 昨晚3点多睡的觉, 今天一大早就醒了, 继续记录技术的点滴;
~~~~~~ 好啦 现在上代码~~~~~~
package com.receipes.quanjin; import java.io.IOException; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import android.app.Activity; import android.app.ProgressDialog; import android.os.AsyncTask; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.LinearLayout; import android.widget.TextView; public class Jsoup4HTMLActivity extends Activity implements OnClickListener { TextView showText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout rootLayout = new LinearLayout(this); rootLayout.setOrientation(LinearLayout.VERTICAL); Button jsoupBtn = new Button(this); jsoupBtn.setId(2001); jsoupBtn.setText("点击开始解析HTML--"); showText = new TextView(this); rootLayout.addView(jsoupBtn); rootLayout.addView(showText); setContentView(rootLayout); jsoupBtn.setOnClickListener(this); } @Override public void onClick(View v) { if(v.getId() == 2001) { handleJsoupParse(); } } String myString = ""; private void handleJsoupParse() { // new Thread(jsoupRunnable).start(); new AsyncTask<Void, Void, Void>() { private ProgressDialog dialog; @Override protected void onPreExecute() { dialog = new ProgressDialog(Jsoup4HTMLActivity.this); dialog.setCancelable(true); dialog.setIndeterminate(false); //设置进度条是否为不明确 dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); //圆形 dialog = ProgressDialog.show(Jsoup4HTMLActivity.this, "", "正在获取jsoup数据...", true); //模态 }; @Override protected Void doInBackground(Void... params) { StringBuilder sb = new StringBuilder(); try { Document doc = Jsoup.connect("http://www.baidu.com").get(); Elements links = doc.select("a[href]"); for(Element link : links) { sb.append(link.attr("abs:href")).append(" ").append(link.text()).append(" "); } myString = sb.toString(); } catch (IOException e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(Void result) { super.onPostExecute(result); if(dialog.isShowing()) { dialog.dismiss(); } showText.setText(myString); } }.execute(); showText.setText(myString); } private Runnable jsoupRunnable = new Runnable() { @Override public void run() { StringBuilder sb = new StringBuilder(); try { Document doc = Jsoup.connect("http://www.baidu.com").get(); Elements links = doc.select("a[href]"); for(Element link : links) { sb.append(link.attr("abs:href")).append(" ").append(link.text()).append(" "); } myString = sb.toString(); } catch (IOException e) { e.printStackTrace(); } } }; }
实现很简单, 一个异步任务完成下载, 没了
其实主要的是【数据分析】---看你请求过去返回的数据类型, 看其中的数据标签是什么,怎么看? 当然是Eclipse经典--debug啦!!! 有人说了, 我不会debug, 你没用过怎么知道自己不会?
断点--F6-watch; 搞定, 你没用过你就说自己不会debug? 呵呵 言辞有点过激、 继续 不知道还能不能上传示意图片了 蛋碎、
主要用到些编程习惯:
1.平时要尝试着用Java代码垒布局,静态拉几个xml页面谁不会······ 我们是全能型的Android开发者哈, 代码也要会垒~ 以后在【动态生成布局】的时候你就知道这个的重要性了, 单纯的xml是不能满足我们的需求的哈~~~
2.学会用异步任务, 而且要很熟练, 各种形式; 其实new Thread() { run() {} }.start();其实也行, 反正看个人习惯吧, runnable+handler也可以--我主要用这个来刷新UI展示动画渐变;
3.千万~~~千万~~~千万~~~千万~~~千万~~~要会用debug, 不想用的大哥大姐们, 我拜托你们了, 真的很爽的啊、
debug+命令行notepad-记事本 >= Log(有点夸张哈)··· 尤其是在接口调试的时候, 相当的关键,地位相当明显!!
继续上图、 不知道是否能上传的了························ 哎呦 还不错 还能继续上传、
好的 , 如上图所示, 在左侧先来个breakpoint, 先别急着让它跑完; 右击-watch一下doc的标签背后携带的具体数据信息, 右上角的信息是不是很靓呀??????
其实没啥了, 这就是传说中的debug的熊样儿, 可爱吧、
此时我们可以如下操作:
1. #+R, 调出命令行,键入notepad, 调出记事本;
2. 将doc中的信息ctrl+A 而后ctrl+C复制到刚打开的记事本中,自己看看返回值的种种tag吧~~ 然后对应的进一步解析;
其实做这一步的目的是要确保有信息返回, 如果此处都是空的, 那么就没有执行下去的理由,从这里向上找原因; 这就叫错误定位吧、 呵呵
好, 那么我们来看上图, f6之后, 执行到links, 我们如果想偷懒的话,可以不看左上角, 直接将鼠标放到要查看的标签上面即可,Eclipse自动将信息弹出来,自己点击查看即可;
我们不是来看热闹的哦, 俗话说··外行看热闹, 内行看门道的哈, 我们的目的是分析数据结构来提取我们想要的信息,
看到红框内的标签了不? 呵呵 对 就是它了···Elements links = doc.select("a[href]");
当提取到我们想要的信息的上一层时, 我们再继续查看当前标签下面的子标签····依次类推吧,若之前解析过XML、JSON的话, 这个是否似曾相识?
我们的debug屡试不爽哈、 其实这个成语用在此处不合适, 屡试不爽--多次尝试不出差错 咱就看它字面意思好了 记录博客也是记录心情嘛 、
再看我们在傻瓜布局中最终要呈现的内容, 同样的招数, 称霸Eclipse界哈、 右上角--是真相;
好啦, 就先写这么多吧, 其实最主要的是知道这个jar包是什么, 做什么用的, 怎么用-语法/使用环境等, 具体的代码实现就顺水推舟了;
其实写这个博客, 主要是突然想到我当时不会、不懂用debug时候的囧相, 调试起来log一大堆, 无限被歧视,呵呵, 也算是自己成长的代价了,那就写出来好啦;异步任务当时也是不太懂, 现在写多了,成熟练工之后就不自然的理解跟明白了;还是要多想,多实现吧;
还是我最欣赏的那句话·············
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~唯有压力才能突破, 才能距破茧成蝶之日更近一步~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
相关文章推荐
- 使用 jsoup 对 HTML 文档进行解析和操作
- 使用Jsoup解析HTML页面
- 我的Android笔记(八)—— 使用Jsoup解析Html
- [置顶] 使用 jsoup 对 HTML 文档进行解析和操作
- 我的Android笔记(八)—— 使用Jsoup解析Html
- 使用 jsoup 对 HTML 文档进行解析和操作
- Java使用jsoup解析html
- 使用 jsoup 对 HTML 文档进行解析和操作
- 使用Jsoup解析HTML页面
- 【转载】使用Jsoup解析html网页
- 使用Jsoup解析和操作HTML
- 使用 jsoup 对 HTML 文档进行解析和操作
- Jsoup解析html的一些使用技巧
- Html快速解析工具——Jsoup使用
- 使用 jsoup 对 HTML 文档进行解析和操作
- JSoup解析HTML使用笔记(一)
- 使用 jsoup 对 HTML 文档进行解析和操作
- 使用Jsoup解析Html
- Html解析之Jsoup的使用
- 使用Jsoup解析从网络上获取到的html源码