您的位置:首页 > Web前端 > JavaScript

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

2016-04-03 22:10 525 查看
想想挺久没有写代码了,最近没事自己做了一个新闻查看器,新闻来源是去各个网站上抓取的,既然要抓取网页上的东西,就要去对网页的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方法同上


其实一些工具灵活运用你会发现更多功能,可能讲的有什么不对的地方请见谅。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: