初识Jsoup之解析HTML
按照国际惯例,我首先应该介绍下Jsoup是个什么东西,然后在介绍下具体用法,然后在来个demo演示,其实我也是这么想的,小编今天花了一天的时间从学习—>解析页面,总算是成果圆满了吧,啊哈,但是,一个不会总结的程序猿不是一个帅气的程序猿,啊哈,这就意味着我是个帅气的猿猿
----------------------------------------------------------------------------------------------------------------------
一、什么是Jsoup?
官网网站:http://jsoup.org/
可在官网下载对应的jar
通俗的将Jsoup就是一个解析网页的东西,然后我们在看下官方的解释:

官方解释就是高大上~
二、Jsoup的基本用法(http://www.open-open.com/jsoup/parsing-a-document.htm)

网站写的很详细,我想聪明的大家看看开发文档一看就懂…恩,有道理,正所谓帅的人都能看懂..
三、demo演示 解析的url:http://sex.guokr.com/
写在前面:忽略链接内容,小编就是找到一个不错的网站~,啊哈,别想歪了
1.解析一个ul –>li

我们来看下这段的源代码:

由此我们知道了大体的样子,现在我们来写编码
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements; import java.io.IOException; /**
* 使用Jsoup解析url
* @tag:url :http://sex.guokr.com/
* Created by monster on 2015/12/11.
*/
public class JsoupZX {
public static void main(String[] args){
final String url="http://sex.guokr.com/" ; try { Document doc = Jsoup.connect(url).get(); Elements container = doc.getElementsByClass("container"); Document containerDoc = Jsoup.parse(container.toString()); Elements module = containerDoc.getElementsByClass("module-list"); Document moduleDoc = Jsoup.parse(module.toString()); //Elements clearfix = moduleDoc.getElementsByClass("clearfix"); //DOM的形式 Elements clearfix = moduleDoc.select(".clearfix"); //选择器的形式 for (Element clearfixli : clearfix){
Document clearfixliDoc = Jsoup.parse(clearfixli.toString());
Elements kind = clearfixliDoc.select(".board-tag"); //选择器的形式
Elements title = clearfixliDoc.select(".tit-post");
Elements author = clearfixliDoc.select("span a"); System.out.println("类别"+kind.text()); //分类
System.out.println("标题"+title.text()); //标题
System.out.println("作者"+author.text()); //作者
System.out.println("详情链接"+title.attr("href")); //标题下的链接 System.out.println("====================="); }
// String title = clearfixli.getElementsByTag("a").text(); // System.out.println(clearfix); } catch (IOException e) {
e.printStackTrace();
}
}
}
结果:

=================================================================================================
2.解析详情页面和评论
链接:http://sex.guokr.com/post/1100992/
上述就是页面的内容
然后我们看下源码:
内容:

评论:

看完源码后,我们进行编码:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements; import java.io.IOException; /**
* 使用Jsoup解析帖子详情和评论
* @tag: url:http://sex.guokr.com/post/1100992/
* Created by monster on 2015/12/11.
*/
public class JSoupDetail { public static void main(String args[]){
final String url= "http://sex.guokr.com/post/1100992/"; try { Document doc = Jsoup.connect(url).get(); Elements container = doc.getElementsByClass("container"); Document containerDoc = Jsoup.parse(container.toString()); String articleTitle = containerDoc.getElementById("articleTitle").text();
String authorName = containerDoc.getElementById("authorName").text();
String time = containerDoc.select("span").first().text();
String imgphotoUrl=containerDoc.select("img").get(1).attr("src");
System.out.println("标题:" + articleTitle); //标题
System.out.println("作者:"+authorName); //作者
System.out.println("发布时间:"+time); //发布时间
System.out.println("作者头像的url:"+imgphotoUrl); //发布时间 Element articleContent = containerDoc.getElementById("articleContent");
Document articleContentDoc = Jsoup.parse(articleContent.toString()); int size= articleContentDoc.select("p").size();
System.out.println("段落数:"+size); System.out.println("帖子内容:"); for (int i=0;i<size;i++){
String content = articleContentDoc.select("p").get(i).text();
System.out.println(content);
} System.out.println("================================================");
System.out.println("帖子评论区域(按照楼层分布)"); Elements cmts =containerDoc.getElementsByClass("cmts");
Document cmtsDoc = Jsoup.parse(cmts.toString());
System.out.println("评论楼层:"+cmtsDoc.select("span").first().text()); Elements cmtslist =cmtsDoc.getElementsByClass("cmts-list"); for (Element clearfix:cmtslist){
String user = clearfix.select("a").get(1).text();
String userPhotoUrl =clearfix.select("img").get(0).attr("src");
String replyTime = clearfix.select("a").get(3).text();
String floor=clearfix.select("span").text(); System.out.println("评论者:"+user+"\n"+"评论者头像url:"+userPhotoUrl+"\n"+"回复时间:"+replyTime+"\n"+"所在楼层:"+floor);
Document replyContentDoc = Jsoup.parse(clearfix.toString());
Elements replyContent = replyContentDoc.getElementsByClass("cmt-content");
System.out.println("评论内容:");
int s =replyContent.select("p").size();
for (int j=0;j<s;j++){
String replycontent = replyContent.select("p").get(j).text();
System.out.println(replycontent); }
System.out.println("================================================");
} } catch (IOException e) {
e.printStackTrace();
} } }
输出结果:

--------->
以上就是小编的demo,写的有点简单,希望理解,啊哈~
另外:欢迎关注小编的博客,么么哒
初识Jsoup之解析HTML的更多相关文章
- 【Jsoup网页解析】
下载链接:http://jsoup.org/download 一.普通的请求方式(不带有cookie) 使用举例: 第一步: Connection conn=Jsoup.connect(url); 第 ...
- 爬取微博的数据时别人用的是FM.view方法传递html标签那么jsoup怎么解析呢
使用JSOUP就行 这里给出点思路 我只做了自己的首页和其他人的微博首页的抓取 其他的抓取没尝试(不好意思 比较懒...) 首先是利用JSOUP进行登陆 获取页面 看了下微博的登陆表格 发现用了aja ...
- HttpClient+jsoup登录+解析 163邮箱
找了几个,只有这个靠谱,用的是httpclient4,另外还需要commons-lang和jsoup包 http://jsoup.org/ http://www.oschina.net/code/sn ...
- 【网络爬虫】【java】微博爬虫(四):数据处理——jsoup工具解析html、dom4j读写xml
之前提到过,对于简单的网页结构解析,可以直接通过观察法.手工写正则解析,可以做出来,比如网易微博.但是对于结构稍微复杂点的,比如新浪微博,如果还用正则,用眼睛一个个去找,未免太麻烦了. 本文介绍两个工 ...
- 使用Jsoup帮助解析具有html标签的数据和解析网页
下载Jsoup包后导入 /** * Created by YGW on 2016/4/17. * 显示公告的详细内容 */public class PressFragment extends Frag ...
- Jsoup库 解析DOM文档
DOM文档包括 HTML, XML等等 下载: http://jsoup.org/download Jsoup 获取数据的方式 //html 文本, url, 本地html String html = ...
- Jsoup API解析HTML中input标签
Jsoup官网地址:http://jsoup.org/ 1. 解析单个input元素 String html = "<p><input align=\"t ...
- Jsoup后台解析html、jsp网页
在一些网络爬虫或者从第三方网站抓取信息的程序都面临1个问题,如何从网页中把所需的信息提取出来,Jsoup是个比较好的选择,它能把网站内容解析成Document,再从document中取element就 ...
- Jsoup爬虫解析
需要下载jsoup-1.8.1.jar包 jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址.HTML文本内容.它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQue ...
随机推荐
- 进新公司用cornerstone-checkout后遇到的奇葩bug,及解决方法
从cornerstone中checkout下新的工程,运行报错. 1.开始错误原因是找不到相对应的某个.m文件的路径 解决方案:将缺少的.m文件重新从项目文件夹中导入 2.后来显示 造成的原因是在下面 ...
- 使用VS2015开发跨平台APP
VS2013开始就可以基于HTML5开发WEBAPP,并借助xamarin或者PHONEGAP实现原生APP 不过升级麻烦,直接下载VS2015CTP6,最好安装在同一个分区上,ANDROID S ...
- 基于Ruby的watir-webdriver自动化测试方案与实施(三)
接着基于Ruby的watir-webdriver自动化测试方案与实施(二) http://www.cnblogs.com/Javame/p/4159468.html 继续 ... ... 编写脚本 ...
- 转载文章-----Rational Rose2007(v7.0)下载地址、安装及激活详解教程(图)
转载地址:http://www.cnblogs.com/leaven/p/3718361.html 最近需要画uml图,之前用的是Rose 2003版的,由于好久没进去了,结果发现原来的激活又失效了, ...
- ARM汇编与C混合编程
GNU内联汇编 内联汇编即在C中直接使用汇编语句进行编程,使程序可以在C程序中实现C语言不能完成的一些工作,例如,在下面几种情况中必须使用内联汇编或嵌入型汇编 程序中使用饱和算术运算(Saturati ...
- charles 抓取eclipse中的请求
charles抓取eclipse中的请求 有时候,想要监测eclipse中发送get获取post请求,一样可以使用代理方式: 1.eclipse代码设置 代码中添加,可以就写在主函数中,然后再调用请求 ...
- js的encodeURIComponent与java的URLEncoder的区别
js中的encodeURIComponent这个函数和java中的URLEncoder有少数不一样的.如下表格就是区别 ascii java js + %20 ! %21 ! ' %27 ' ( ...
- Xcode 6、7 打包
从 Xcode 6 开始,打包需要开发者帐号添加到授权帐号列表里. 现实情况是作为公司开发工作者,很少能获此殊荣. 解决之道: 用 Xcode 6/7 照常打包,生成 *.xcarchive 文件,然 ...
- windows下安装并配置mysql
前言:前面三篇文章将django的环境搭建完后,还只能编写静态网页,如果要用到数据库编写动态网页,那么还需要数据库 本章讲解mysql5.6数据库的安装和配置,对于其他版本仅供参考,不一定试用!推荐使 ...
- Linux File Recovery Study
Background Today I did stupid things that I went into the ~/Downloads/ and pressed [Alt] + [A] then ...