按照国际惯例,我首先应该介绍下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的更多相关文章

  1. 【Jsoup网页解析】

    下载链接:http://jsoup.org/download 一.普通的请求方式(不带有cookie) 使用举例: 第一步: Connection conn=Jsoup.connect(url); 第 ...

  2. 爬取微博的数据时别人用的是FM.view方法传递html标签那么jsoup怎么解析呢

    使用JSOUP就行 这里给出点思路 我只做了自己的首页和其他人的微博首页的抓取 其他的抓取没尝试(不好意思 比较懒...) 首先是利用JSOUP进行登陆 获取页面 看了下微博的登陆表格 发现用了aja ...

  3. HttpClient+jsoup登录+解析 163邮箱

    找了几个,只有这个靠谱,用的是httpclient4,另外还需要commons-lang和jsoup包 http://jsoup.org/ http://www.oschina.net/code/sn ...

  4. 【网络爬虫】【java】微博爬虫(四):数据处理——jsoup工具解析html、dom4j读写xml

    之前提到过,对于简单的网页结构解析,可以直接通过观察法.手工写正则解析,可以做出来,比如网易微博.但是对于结构稍微复杂点的,比如新浪微博,如果还用正则,用眼睛一个个去找,未免太麻烦了. 本文介绍两个工 ...

  5. 使用Jsoup帮助解析具有html标签的数据和解析网页

    下载Jsoup包后导入 /** * Created by YGW on 2016/4/17. * 显示公告的详细内容 */public class PressFragment extends Frag ...

  6. Jsoup库 解析DOM文档

    DOM文档包括 HTML, XML等等 下载: http://jsoup.org/download Jsoup 获取数据的方式 //html 文本, url, 本地html String html = ...

  7. Jsoup API解析HTML中input标签

    Jsoup官网地址:http://jsoup.org/ 1. 解析单个input元素     String html = "<p><input align=\"t ...

  8. Jsoup后台解析html、jsp网页

    在一些网络爬虫或者从第三方网站抓取信息的程序都面临1个问题,如何从网页中把所需的信息提取出来,Jsoup是个比较好的选择,它能把网站内容解析成Document,再从document中取element就 ...

  9. Jsoup爬虫解析

    需要下载jsoup-1.8.1.jar包 jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址.HTML文本内容.它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQue ...

随机推荐

  1. Ajax中Get请求与Post请求的区别

    Get请求和Post请求的区别 1.使用Get请求时,参数在URL中显示,而使用Post方式,则不会显示出来 2.使用Get请求发送数据量小,Post请求发送数据量大 例子 页面的HTML代码: &l ...

  2. C#.NET万能数据库访问封装类(ACCESS、SQLServer、Oracle)

    using System; using System.Collections; using System.Collections.Specialized; using System.Data; usi ...

  3. SQL SERVER 2012链接到SQL SERVER 2000的问题解决案例

    前几天在在桦仔的SQLSERVER走起微信公众帐号看到一篇文章MS SQL Server2014链接MS SQL Server 2000,当时手机上囫囵吞枣看了个大概,知道是由于SQL SERVER ...

  4. SQL Server:触发器详解

    1. 概述 触发器是一种特殊的存储过程,它不能被显式地调用,而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活. 所以触发器可以用来实现对表实施复杂的完整性约束. 2. 触发器的分类 SQL S ...

  5. SQL数据库修改默认备份和恢复路径

    每次都做数据恢复和备份的时候,点Add文件,系统会自动指定到一个默认路径,是SQL的安装目录,但是我的数据库不是备份在这里,每次都要更改有点麻烦. 如上图,更改这个有三个方法. 方法一:找到注册表,手 ...

  6. [经验]Textbox 做日志记录,

    private void Log(string msg) { txtLog.MaxLength = ; txtLog.AppendText(msg); } 起因:在Winform中用Textbox显示 ...

  7. IE10/11克隆textarea时 bug

    重现代码 <!doctype html> <html> <head> <meta charset="UTF-8"> </hea ...

  8. Ubuntu Mysql 维护

    安装MySql sudo apt-get install mysql-server 进入Mysql Shell mysql -u root -p 查询数据库 SHOW DATABASES; 创建数据库 ...

  9. 使用WinRar软件制作程序安装包

    之前我写过使用好压软件打包程序,见随笔: 使用好压(HaoZip)软件打包EverEdit制作安装程序 - Fetty - 博客园http://www.cnblogs.com/fetty/p/4907 ...

  10. C# 扩展方法集

    语法注意点 可以使用扩展方法来扩展类或接口. 不能重写扩展方法. 扩展方法只能在非嵌套.非泛型静态类内部定义. 扩展方法必须定义在静态类中. 扩展方法的第一个参数的类型用于指定被扩展的类型,它限制该扩 ...