利用jsoup解析网页和xml文件

当我们需要从网页上抓取自己想要的数据时,可以利用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>

jsoup解析代码如下:

	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

源码下载

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值