当我们需要从网页上抓取自己想要的数据时,可以利用jsoup来实现,一个开源的jar包,短小精悍,很好入门:
今天要解析的是搜狐新闻:http://pinglun.sohu.com/
代码如下:
private static void parse() { try { Document doc = Jsoup.connect("http://pinglun.sohu.com/").get(); Element element = doc.getElementsByAttributeValue("class","tp-news tp-lt grid-460").get(0); element = element.select("div.title").get(0); element = element.getElementsByTag("a").get(0); System.out.println(element.attr("href")+"=="+element.text()); element = doc.getElementsByAttributeValue("class","news-list").get(0); Elements elements = element.getElementsByTag("li"); for (int i = 0; i < elements.size(); i++) { element = elements.get(i).getElementsByTag("a").get(0); System.out.println("数量="+element.text()+"==标题:"+elements.get(i).getElementsByTag("a").get(2).text()); } } catch (IOException e) { e.printStackTrace(); }需要解析csdn博客
得到标题和浏览次数,并递归解析每一个标题分类下的子标题,代码如下:
private void parse() { try { // html = DataUtil.doGet(url); // Document doc = Jsoup.parse(html); Document doc = Jsoup.connect(url).userAgent("MSIE 7.0").timeout(10000).get(); Element element = doc.getElementsByAttributeValue("class","panel_head").get(4); System.out.println(element.getElementsByTag("span").get(0).text()); element = doc.getElementsByAttributeValue("class","panel_body").get(2); Elements elements = element.getElementsByTag("li"); System.out.println("elements.size="+elements.size()); for (int i = 0; i < elements.size(); i++) { element = elements.get(i).getElementsByTag("a").get(0); title = element.text(); titleUrl = element.attr("href"); titleLooked = elements.get(i).getElementsByTag("span").get(0).text(); titleCategory = new TitleCategory(title, titleUrl, titleLooked); if (titleUrl.startsWith("/")) { titleUrl = "http://blog.csdn.net" + titleUrl; } System.out.println(titleCategory); doc = Jsoup.connect(titleUrl).userAgent("MSIE 7.0").timeout(10000).get(); Elements elements2 = doc.getElementsByAttributeValue("class","link_title"); for (Element element2 : elements2) { String titleName = element2.getElementsByTag("a").get(0).text(); System.out.println(titleName); } } } catch (Exception e) { e.printStackTrace(); }运行结果:
文章分类 elements.size=15 标题:【Android 精彩案例】==url:http://blog.csdn.net/lmj623565791/article/category/2680597==lookedCount:(20) Android DrawerLayout 高仿QQ5.2双向侧滑菜单 Android 高仿微信6.0主界面 带你玩转切换图标变色 Android 自定义控件实现刮刮卡效果 真的就只是刮刮卡么 Android 打造任意层级树形控件 考验你的数据结构和设计 Android 超高仿微信图片选择器 图片该这么加载 Android 高仿微信头像截取 打造不一样的自定义控件 Android 实现形态各异的双向侧滑菜单 自定义控件来袭 Android 高仿微信实时聊天 基于百度云推送 Android Handler 异步消息处理机制的妙用 创建强大的图片加载类 Android 自定义RecyclerView 实现真正的Gallery效果 Android 自定义 HorizontalScrollView 打造再多图片(控件)也不怕 OOM 的横向滑动效果 Android 自定义 ViewPager 打造千变万化的图片切换效果 Android 屏幕旋转 处理 AsyncTask 和 ProgressDialog 的最佳方案 ScrollView反弹效果 仿小米私密短信效果 CSDN Android客户端的制作 导航帖 高仿微信5.2.1主界面架构 包含消息通知 实现app上对csdn的文章查看,以及文章中图片的保存 (制作csdn app 完结篇) 实现app上对csdn的文章列表上拉刷新下拉加载以及加入缓存文章列表的功能 (制作csdn app 四) 抓取csdn上的各类别的文章 (制作csdn app 二) Android 使用Fragment,ViewPagerIndicator 制作csdn app主要框架 标题:【Android 源码解析】==url:http://blog.csdn.net/lmj623565791/article/category/2680605==lookedCount:(15) Android 框架炼成 教你如何写组件间通信框架EventBus Android EventBus源码解析 带你深入理解EventBus Android ViewGroup事件分发机制 Android View 事件分发机制 源码解析 (上) Android AsyncTask 源码解析 Android aidl Binder框架浅析 Android Handler 异步消息处理机制的妙用 创建强大的图片加载类 Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系 Android LayoutInflater深度解析 给你带来全新的认识 Android 属性动画(Property Animation) 完全解析 (下) Android 属性动画(Property Animation) 完全解析 (上) Android Fragment 真正的完全解析(下) Android Fragment 真正的完全解析(上) Android 官方推荐 : DialogFragment 创建对话框 Android AdapterView View的复用机制 分析 标题:【Android 自定义控件实战】==url:http://blog.csdn.net/lmj623565791/article/category/2680595==lookedCount:(15) Android 高仿微信6.0主界面 带你玩转切换图标变色 Android 实战美女拼图游戏 你能坚持到第几关 Android 高仿微信头像截取 打造不一样的自定义控件 Android 实现形态各异的双向侧滑菜单 自定义控件来袭 Android 手势检测实战 打造支持缩放平移的图片预览效果(下) Android 手势检测实战 打造支持缩放平移的图片预览效果(上) Android 高仿 QQ5.0 侧滑菜单效果 自定义控件来袭 Android 自定义ViewGroup 实战篇 -> 实现FlowLayout Android 自定义RecyclerView 实现真正的Gallery效果 Android 自定义 HorizontalScrollView 打造再多图片(控件)也不怕 OOM 的横向滑动效果 Android 自定义ViewGroup手把手教你实现ArcMenu Android 手势锁的实现 让自己的应用更加安全吧 Android 完美实现图片圆角和圆形(对实现进行分析) Andoird 自定义ViewGroup实现竖向引导界面 ListView滑动删除 ,仿腾讯QQ 标题:【Android 自定义控件之起步】==url:http://blog.csdn.net/lmj623565791/article/category/2680591==lookedCount:(5) Android 手把手教您自定义ViewGroup(一) Android 自定义View (四) 视频音量调控 Android 自定义View (三) 圆环交替 等待效果 Android 自定义View (二) 进阶 Android 自定义View (一) 标题:【Android 快速开发】==url:http://blog.csdn.net/lmj623565791/article/category/2518197==lookedCount:(6) Android 进阶 教你打造 Android 中的 IOC 框架 【ViewInject】 (下) Android 进阶 教你打造 Android 中的 IOC 框架 【ViewInject】 (上) Android 快速开发系列 ORMLite 框架最佳实践 Android ORMLite 框架的入门用法 Android快速开发系列 10个常用工具类 Android 快速开发系列 打造万能的ListView GridView 适配器 标题:【Android 原生开发游戏】==url:http://blog.csdn.net/lmj623565791/article/category/2680601==lookedCount:(2) Android 实战美女拼图游戏 你能坚持到第几关 Android 带你玩转实现游戏2048 其实2048只是个普通的控件 标题:【android 进阶之路】==url:http://blog.csdn.net/lmj623565791/article/category/2210589==lookedCount:(49) Android EventBus实战 没听过你就out了 Android 实战美女拼图游戏 你能坚持到第几关 Android 实现个性的ViewPager切换动画 实战PageTransformer(兼容Android3.0以下) Android 自定义控件实现刮刮卡效果 真的就只是刮刮卡么 Android 带你玩转实现游戏2048 其实2048只是个普通的控件 Android 超高仿微信图片选择器 图片该这么加载 Android 实现形态各异的双向侧滑菜单 自定义控件来袭 Android 手势检测实战 打造支持缩放平移的图片预览效果(下) Android 手势检测实战 打造支持缩放平移的图片预览效果(上) Android 进阶 教你打造 Android 中的 IOC 框架 【ViewInject】 (下) Android 进阶 教你打造 Android 中的 IOC 框架 【ViewInject】 (上) Android 高仿 QQ5.0 侧滑菜单效果 自定义控件来袭 Android 自定义控件打造史上最简单的侧滑菜单 Android ViewGroup事件分发机制 Android 快速开发系列 ORMLite 框架最佳实践 Android View 事件分发机制 源码解析 (上) Android 自定义ScrollView ListView 体验各种纵向滑动的需求 Android 快速开发系列 打造万能的ListView GridView 适配器 Android 高仿微信实时聊天 基于百度云推送 Android AsyncTask 源码解析 标题:【Java 并发专题】==url:http://blog.csdn.net/lmj623565791/article/category/2132087==lookedCount:(15) Java并发专题 带返回结果的批量任务执行 CompletionService ExecutorService.invokeAll Java 并发专题 : Timer的缺陷 用ScheduledExecutorService替代 Java / Android 基于Http的多线程下载的实现 Java 并发专题 : Executor详细介绍 打造基于Executor的Web服务器 Java 并发专题 : CyclicBarrier 打造一个安全的门禁系统 Java 并发专题 :FutureTask 实现预加载数据 在线看电子书、浏览器浏览网页等 Java 并发专题 : Semaphore 实现 互斥 与 连接池 Java 并发专题 :闭锁 CountDownLatch 之一家人一起吃个饭 Java进阶 创建和销毁对象 Java OCR tesseract 图像智能字符识别技术 Java代码实现 Java OCR tesseract 图像智能字符识别技术 网页信息抓取进阶 支持Js生成数据 Jsoup的不足之处 从原理角度解析Android (Java) http 文件上传 Java 将字节数组转化为16进制的多种方案 Java爬虫,信息抓取的实现 标题:【Java 设计模式】==url:http://blog.csdn.net/lmj623565791/article/category/2206597==lookedCount:(10) 设计模式 状态模式 以自动售货机为例 设计模式 模版方法模式 展现程序员的一天 设计模式 外观模式 一键电影模式 设计模式 适配器模式 以手机充电器为例 设计模式 命令模式 之 管理智能家电 设计模式 单例模式 设计模式 工厂模式 从卖肉夹馍说起 设计模式 装饰者模式 带你重回传奇世界 设计模式 观察者模式 以微信公众服务为例 设计模式 策略模式 以角色游戏为背景 标题:【Android 百度地图】==url:http://blog.csdn.net/lmj623565791/article/category/2392939==lookedCount:(4) Android 百度地图 SDK v3.0.0 (四) 引入离线地图功能 Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用 Android 百度地图 SDK v3.0.0 (二) 定位与结合方向传感器 Android 百度地图 SDK v3.0.0 (一) 标题:【html5 css3精彩案例】==url:http://blog.csdn.net/lmj623565791/article/category/2335135==lookedCount:(14) Android 智能问答机器人的实现 HTML5 CSS3 诱人的实例 : 网页加载进度条的实现,下载进度条等 HTML5 CSS3 诱人的实例: 3D立方体旋转动画 HTML5 CSS3 诱人的实例 :canvas 模拟实现电子彩票刮刮乐 HTML5 CSS3 专题 :诱人的实例 3D展示商品信息 HTML5 CSS3 专题 :诱人的实例 3D旋转木马效果相册 HTML5 CSS3专题 诱人的实例 CSS3打造百度贴吧的3D翻牌效果 HTML5 CSS3 诱人的实例 :模仿优酷视频截图功能 HTML5 CSS3 经典案例:无插件拖拽上传图片 (支持预览与批量) (二) HTML5 CSS3 经典案例:无插件拖拽上传图片 (支持预览与批量) (一) HTML5 CSS3 专题 : 拖放 (Drag and Drop) HTML5 CSS3 精美案例 : 实现VCD包装盒个性幻灯片 HTML5 CSS3专题 纯CSS打造相册效果 客户端上显示csdn上的各类别下的的文章列表 (制作csdn app 三) 标题:【Android github 控件】==url:http://blog.csdn.net/lmj623565791/article/category/2188109==lookedCount:(9) Android 框架炼成 教你如何写组件间通信框架EventBus Android EventBus源码解析 带你深入理解EventBus Android EventBus实战 没听过你就out了 Android ORMLite 框架的入门用法 Android PullToRefresh (ListView GridView 下拉刷新) 使用详解 Android SlidingMenu 使用详解 SwipeListView 详解 实现微信,QQ等滑动删除效果 Android Volley 之自定义Request Android 省市县 三级联动(android-wheel的使用) 标题:【Android 基础】==url:http://blog.csdn.net/lmj623565791/article/category/2170321==lookedCount:(16) Android ORMLite 框架的入门用法 Android快速开发系列 10个常用工具类 Android PullToRefresh (ListView GridView 下拉刷新) 使用详解 Android推送 百度云推送 入门篇 Java / Android 基于Http的多线程下载的实现 Android SwipeRefreshLayout 官方下拉刷新控件介绍 Android 面试精华题目总结 从原理角度解析Android (Java) http 文件上传 Android Splash界面支持用户点击 直接进入主界面 Andorid 反编译App Android 从网络中获取数据时 产生部分数据乱码的解决 Android 导入第三方jar时 出现ClassNotFoundException Android 仿Win8的metro的UI界面(上) Android Java汉字转拼音总结 Android使用Activity用作弹出式对话框 利用Theme自定义Activity间的切换动画 标题:【Javascript 】==url:http://blog.csdn.net/lmj623565791/article/category/2218967==lookedCount:(9) HTML5 CSS3 诱人的实例 : 网页加载进度条的实现,下载进度条等 HTML5 CSS3 诱人的实例 :canvas 模拟实现电子彩票刮刮乐 HTML5 CSS3 诱人的实例 :模仿优酷视频截图功能 Javascript 设计模式 单例 Javascript 进阶 面向对象编程 继承的一个例子 Javascript 进阶 继承 Javascript 进阶 封装 Javascript 进阶 作用域 作用域链 Javascript中的__proto__、prototype、constructor 标题:【rabbitMQ 用法】==url:http://blog.csdn.net/lmj623565791/article/category/2386657==lookedCount:(5) RabbitMQ (五)主题(Topic) RabbitMQ (四) 路由选择 (Routing) RabbitMQ (三) 发布/订阅 RabbitMQ (二)工作队列 RabbitMQ 入门 Helloworld
利用jsoup解析xml文件:
xml文件如下:
<com.example.myarc.MyVerticalArc xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <ImageView android:id="@+id/mainid" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/main" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/one" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/two" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/three" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/four" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/two" /> </com.example.myarc.MyVerticalArc>
File xmlFile2 = new File("./activity_main.xml"); System.out.println(xmlFile2); Document doc2 = Jsoup.parse(xmlFile2,"utf-8"); // System.out.println(doc2.body()); Elements elements2 = doc2.getElementsByTag("ImageView"); // System.out.println(elements2.size()); for (Element element : elements2) { String id = ""; if (element.hasAttr("android:id")) { id = element.attr("android:id"); }else{ id = "该属性没有id"; } String width = element.attr("android:layout_width"); String height = element.attr("android:layout_height"); String src = element.attr("android:src"); System.out.println("id :"+id+" width :"+width+" height :"+height+" src :"+src); }运行结果:
id :@+id/mainid width :wrap_content height :wrap_content src :@drawable/main id :没有id属性 width :wrap_content height :wrap_content src :@drawable/one id :没有id属性 width :wrap_content height :wrap_content src :@drawable/two id :没有id属性 width :wrap_content height :wrap_content src :@drawable/three id :没有id属性 width :wrap_content height :wrap_content src :@drawable/four id :没有id属性 width :wrap_content height :wrap_content src :@drawable/two