Html快速解析工具——Jsoup使用

想想挺久没有写代码了,最近没事自己做了一个新闻查看器,新闻来源是去各个网站上抓取的,既然要抓取网页上的东西,就要去对网页的html进行解析,一开始使用正则表达式去去掉不用的部分,后来发现自己的正则学的不是很好,抓取的时候遇到了很多困难,于是想到了xml解析,可是后来听说有Json这个库好像很好用,去看了下,发现有很多不错的功能。

好了,废话说的有点多,开始进入正题吧!

一、函数介绍

Element元素可以用于提取你需要的内容
Elements:是Element列表,可以用于存放多个Element
Document:是Element的子类,与Element功能类似

1、Jsoup.parse(String html) //这个方法可以获取到一个Document对象,html是一个带html标签的字符串

2、Jsoup.connect(String url).get()//用于直接获取一个网页的Document对象
Document可以使用头String()的可以使其转化为一个字符串,字符串的内容就是该页面的带html标签的源码(Element也一样)

3、Document与Element对象皆有如下的方法,可以用以下的方法提取需要的内容

getElementsByTag(String tag);//根据标签提取元素里面对应标签的内容,返回一个Elements对象,可以用for循环提取出没一个Element的内容
getElementByClass(String class);//根据标签提取元素里面对应类的内容,返回的也是ELements对象
getElementById(String id);//是根据id去提取Element对象的,因为在html里,id只有一个所以获取的是单个的Element对象

举例介绍:

假如你要去获取百度网的所有a标签的元素,可以这么做
//定义一个网站链接
String url = "http://www.baidu.com";
//获取Document对象
Document doc = Jsoup.connect().get();
//用Document对象获取元素集合Elements
Elements elements = doc.getElementsByTag("a");

//用于存放连接地址的值
List<String> hrefs = new ArrayList<String>();
//获取所有元素中的href属性的值
for(Element e:elements){
    hrefs.add(e.attr("href"));
}
//用于存放所有的标签包裹内容的值
List<String> names = new ArrayList<String>();
//获取所有元素中的text属性的值
for(Element e:elements){
    hrefs.add(e.text());
}
假如已经通过Document或是Element的toString()将其转换为字符串对象同样可以用Jsoup.parse(String html)将其转化为Document对象进行操作

2、取出自己定义的html字符串的mychoose类里面的内容

//自定义html字符串
String html = "<html>
                <body>
                <div class="mychoose">
                这是一段文字
                div>
                <div class="mychoose">
                这是第二段文字
                div>
                <p class="mychoose">
                这是p标签的文字
                p>
                body>
                html>"
    //获得Document对象
    Document doc = Jsoup.parse(html);
    //根据class取出Elements集合
    Elements elements = doc.getElementsByClass("mychoose");

    //取出第一个Element对象
    ELement first = elements.get(0);
    String firstStr = first.toString();//这句话提取出来的字符串是<div class="mychoose">这是一段文字div>
    //同样也可以用first.text()提取对应标签包裹的内容字符串

3、删除script和style标签的内容

//假设原来的带html标签字符串是html;
//获取Document对象
Document doc = Jsoup.parse(html);
//获取全部的带script内容
Elements olds = doc.getElementsByTag("script");
//遍历替换可以将对应字段转化为空
for(Element o:olds){
    html = html.replace(o.toString,""); 
}
//删除style方法同上

其实一些工具灵活运用你会发现更多功能,可能讲的有什么不对的地方请见谅。

你可能感兴趣的:(java学习,android学习)