初识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 ...
随机推荐
- 思考:用开发移动app的观念来开发网站
首先祝大家新年快乐.万事如意. 开发网站程序也有一些年头了,从最初的静态HTML+ JS,到后来的WebForm,然后过渡到现在的MVC. 由于最近做一些技术调研,也接触了很多移动开发,iOS和And ...
- [转]CTO、技术总监、首席架构师的区别
经常有创业公司老板来拜访我,常常会拜托给我一句话:帮我找一个CTO. 我解释的多了,所以想把这个写下来,看看你到底需要的应该是啥. 一.高级程序员 如果你是一个刚刚创业的公司,公司没有专职产品经理和项 ...
- CGLib动态代理原理及实现
JDK实现动态代理需要实现类通过接口定义业务方法,对于没有接口的类,如何实现动态代理呢,这就需要CGLib了.CGLib采用了非常底层的字节码技术,其原理是通过字节码技术为一个类创建子类,并在子类中采 ...
- MongoDB学习笔记~自己封装的Curd操作(按需更新的先决条件)
回到目录 我们上一讲中介绍了大叔封装的Mongo仓储,其中介绍了几个不错的curd操作,而对于按需更新内部子对象,它是有条件的,即你的子对象不能为null,也就是说,我们在建立主对象时,应该为子对象赋 ...
- GIT/node使用
一. 为不同域名的库自动保存不同的用户名和密码 比如 公司的库是 http://source.sohu.com,另一个是 http://www.github.com,命令行中分别两个命令就搞定了 gi ...
- centos 6.x安装rvm 配置 Ruby开发环境
rvm是ruby的版本管理工具 还可对ruby进行 安装 卸载 等 1.安装 curl # sudo yum install curl # curl -L get.rvm.io | bash ...
- Ubuntu 系统 update-rc.d 命令
Ubuntu或者Debian系统中update-rc.d命令,是用来更新系统启动项的脚本.这些脚本的链接位于/etc/rcN.d/目录,对应脚本位于/etc/init.d/目录.在了解update-r ...
- -bash: /bin/rm: Argument list too long
使用rm * -f删除缓存目录文件时,报如下错误 -bash: /bin/rm: Argument list too long 提示文件数目太多. 解决的办法是使用如下命令: ls | xargs - ...
- 导入项目时,有关[2016-04-03 20:38:02 - Dex Loader] Unable to execute dex: Multiple dex files 问题
最近我在学习androidUI设计,在网上找了一个UI菜单界面开源代码示例,按照步骤导入项目,运行的时候控制台结果报了如下错误: [2016-04-03 20:38:02 - Dex Loader] ...
- [WPF系列]-使用Binding来同步不同控件的Dependency property
简介 项目中经常会用到,同步两个控件的值,本文就简单列举两种方式来同步不同控件的两个Dependency Property. 示例 效果图: 只使用C#代码: //获取slider1的ValueDep ...