android解析html新闻的方法,Android开发 - 抓取并解析网页数据(xml解析、html解析)...

本文详细介绍了XML的三种解析方式:DOM、SAX和PULL解析,强调了各自的特点和适用场景。通过实例展示了Android中PULL解析XML的过程,并给出了HTML解析中使用Jsoup库的用法,强调了Jsoup在抓取和操作HTML数据上的便利性。
摘要由CSDN通过智能技术生成

网页有两种格式,一种是xml另一种是html,目前似乎好像大部分都是html格式的,查看网页格式的方法是在浏览器中右键-->查看源码或者直接F12即可。

一、XML解析

1)DOM解析

DOM(Document Object Mode)是将XML文件的所有内容以文档树的方式存在内存中,通过节点以及节点之间的关系来解析XML文件。由于DOM操作会将整个XML文件存放在内存中,所以消耗内存大,较大的文档不采用这种方法解析。

2)SAX解析

SAX解析,逐行扫描XML文档,遇到标签时触发姐系处理器,采用事件处理的方式解析XML,在读取文档的同时即可对XML进行处理。可以解析超大XML,但是SAX解析只能读取XML中的数据,无法对数据进行增删改

3)PULL解析

PULL解析器是一个开源Java项目,既可用于Android应用也可用于JavaEE程序。Android中集成了PULL解析器,因此,Android中常用的就是PULL解析

此处提供一个xml地址:http://bbs.csdn.net/recommend_tech_topics.atom

使用案例:

此处使用pull解析的方式

需要解析的xml:

http://bbs.csdn.net/topics/392114349

2017-03-08T15:51:57+08:00

2017-12-19T15:04:26+08:00

dubbo下如何使用hibernate的级联操作

dubbo下如何使用hibernate的级联操作

a461666405

根据xml内容分类创建实体类即可。

新建一个XMLSerivce工具类用来解析xml

public class XMLService {

// 返回信息集合

public static List getNewsInfo(InputStream is) throws Exception {

XmlPullParser parser = Xml.newPullParser(); // 获取Pull解析器

parser.setInput(is, "utf-8");

List list = null;

Bean bean = null;

// 得到当前事件的类型

int type = parser.getEventType();

while (type != XmlPullParser.END_DOCUMENT) {

switch (type) {

// XML文档的开始START_DOCUMENT 例如:<?xml version="1.0" encoding="UTF-8"?> 0

case XmlPullParser.START_DOCUMENT:

list = new ArrayList<>();

break;

// XML文档节点开始START_TAG 例如: 2

case XmlPullParser.START_TAG:

bean = new Bean();

if ("entry".equals(parser.getName())) {

Log.e("XML", "");

} else if ("id".equals(parser.getName())) {

String path = parser.nextText();

bean.setPath(path);

Log.e("XML", "path == " + path + "parse == " + parser.getName());

} else if ("published".equals(parser.getName())) {

String published = parser.nextText();

bean.setPublised(published);

Log.e("XML", "published == " + published + "parse == " + parser.getName());

} else if ("updated".equals(parser.getName())) {

String updtaed = parser.nextText();

bean.setUpdated(updtaed);

Log.e("XML", "updated == " + updtaed + "parse == " + parser.getName());

} else if ("title".equals(parser.getName())) {

String title = parser.nextText();

bean.setTitle(title);

Log.e("XML", "title == " + title + "parse == " + parser.getName());

} else if ("summary".equals(parser.getName())) {

String summary = parser.nextText();

bean.setUpdated(summary);

Log.e("XML", "summary == " + summary + "parse == " + parser.getName());

} else if ("author".equals(parser.getName())) {

String author = parser.nextText();

bean.setUpdated(author);

Log.e("XML", "author == " + author + "parse == " + parser.getName());

}

break;

// XML文档的结束节点 如 3

case XmlPullParser.END_TAG:

if ("entry".equals(parser.getName())) {

Log.e("XML", "解析xml一个节点完成" + parser.getName());

// 处理完一个entry标签

list.add(bean);

bean = null;

}

break;

}

type = parser.next(); // 解析下一个节点

}

return list;

}

}

在Activity中,

private void pullParseXml(){

final Message message = new Message();

beanList = new ArrayList<>();

new Thread(new Runnable() {

@Override

public void run() {

try {

URL url = new URL("http://bbs.csdn.net/recommend_tech_topics.atom");

HttpURLConnection conn = (HttpURLConnection) url.openConnection();

conn.setRequestMethod("GET");

conn.setConnectTimeout(5000);

int code = conn.getResponseCode();

if (code == 200){

Log.e("XML","请求成功");

InputStream is = conn.getInputStream();

beanList = XMLService.getNewsInfo(is);

Log.e("XML",beanList.size()+ "");

// 成功获取数据 给主线程发消息

message.what = 3;

handler.sendMessage(message);

}

} catch (Exception e) {

// 获取数据失败,给主线程发消息,处理数据

message.what = 4;

handler.sendMessage(message);

e.printStackTrace();

}

}

}).start();

}

得到的数据:

5d3f91ab7234

xml解析得到的数据

二、Html解析

数据源来自虎扑体育

5d3f91ab7234

虎扑体育源码

1)Jsoup

Jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。

Jsoup的主要功能:

从一个 URL,文件或字符串中解析 HTML;

使用 DOM 或 CSS 选择器来查找、取出数据;

可操作 HTML 元素、属性、文本;

------注释写在代码里-----

使用前需要导入Jsoup的jar包,复制jar包AndroidStudio中lib目录下并右键Add As Library。点击下载

使用案例

private void getDataByJsoup(){

final NewsInfo newsInfo = new NewsInfo();

final Message message = new Message();

newsList.add(newsInfo);

// 开启一个新线程

new Thread(new Runnable() {

@Override

public void run() {

try {

// 网络加载HTML文档

Document doc = Jsoup.connect("https://voice.hupu.com/nba")

.timeout(5000) // 设置超时时间

.get(); // 使用GET方法访问URL

Elements elements = doc.select("div.list-hd");

for (Element element:elements){

String title = element.select("a").text(); // 新闻标题

String url = element.select("a").attr("href"); // 新闻内容链接

newsInfo.setTitle(title);

newsInfo.setNewsUrl(url);

Log.e("TAG","Jsoup ======>>" + title + url);

}

Elements elements1 = doc.select("div.otherInfo");

for (Element element: elements1){

String time = element.select("a").text(); // 时间

newsInfo.setNewsTime(time);

Log.e("TAG","Jsoup ======>>" + time );

}

message.what = 1;

} catch (IOException e) {

message.what = 2;

e.printStackTrace();

}

handler.sendMessage(message);

}

}).start();

}

获取的数据:

5d3f91ab7234

Jsoup获取的数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值