使用Jsoup简单解析HTML文件示例
2017-05-17 21:51
981 查看
一、前言
jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。在Java爬虫项目中,html解析也是必须的一环,这里简单介绍下jsoup的用法。二、使用方法
1.获取Document对象。
如果html文件是以String形式保存的话,可以使用parse方法直接解析为Document:Document doc = Jsoup.parse(html);
若是url形式的话可以使用connect方法直接获取html文件:
Document doc = Jsoup.connect("http://blog.csdn.net/roy_70").get();
如果运行的时候报了如下错误:
org.jsoup.HttpStatusException: HTTP error fetching URL. Status=403, URL=...
这说明url的网站采用了策略禁止此类访问,需要模仿浏览器行为,可以使用如下方式:
doc = Jsoup.connect("http://blog.csdn.net/roy_70") .userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31") .get();
或者
Document doc = Jsoup.connect("http://blog.csdn.net/roy_70") .data("query", "Java") .userAgent("Mozilla") .cookie("auth", "token") .timeout(3000) .post();
2.解析Document
将HTML解析成一个Document之后,就可以使用类似于DOM的方法进行操作。Document内的方法非常多,具体使用可以参照API使用,常用的有:getElementById(String id)
getElementsByTag(String tag)
getElementsByClass(String className)
getElementsByAttribute(String key) (and related methods)
getAllElements()
使用这些可以逐级解析出想要的Element项。
由于我对前端的只是不太了解,所以html和js的结构也不熟悉,只能根据上述基本的方法和字符串处理获取到想要的部分内容。
三、示例
以我的博客首页为例,http://blog.csdn.net/roy_70,获取到的html文件太大,就不全部贴出,以我们要取得访问数和积分为例,现根据id获取到这一部分。Element times_content = doc.getElementById("blog_rank");
获取到的times_content内容如下:
<ul id="blog_rank"> <li>访问:<span>59404次</span></li> <li>积分:<span>947</span> </li> <li>等级: <span style="position:relative;display:inline-block;z-index:1"> <img src="http://c.csdnimg.cn/jifen/images/xunzhang/jianzhang/blog3.png" alt="" style="vertical-align: middle;" id="leveImg" /> <div id="smallTittle" style=" position: absolute; left: -24px; top: 25px; text-align: center; width: 101px; height: 32px; background-color: #fff; line-height: 32px; border: 2px #DDDDDD solid; box-shadow: 0px 2px 2px rgba (0,0,0,0.1); display: none; z-index: 999;"> <div style="left: 42%; top: -8px; position: absolute; width: 0; height: 0; border-left: 10px solid transparent; border-right: 10px solid transparent; border-bottom: 8px solid #EAEAEA;"></div> 积分:947 </div> </span> </li> <li>排名:<span>千里之外</span></li> </ul>
我这里使用的getAllElement方法
Elements times_links = times_content.getElementsByTag("span"); System.out.println(times_links.get(0).toString()); System.out.println(String points = times_links.get(1).toString());
输出:
<li>访问:<span>59404次</span></li> <li>积分:<span>947</span> </li>
这样就得到了需要的两项元素。
四、后记
我相信jsoup提供了更为强大的处理,只因为我对html以及Document结构不太熟悉,所以无法灵活的使用其中强大的处理方法,这里只做了能做到的简单处理学习。以后如果有了更好的方法,会采用更简单的方法,也欢迎大家提供更为简单处理方式交流,谢谢。相关文章推荐
- 使用Jsoup解析html文件
- Java使用Jsoup简单解析页面
- 网页解析Jsoup简单使用
- html&xml解析之jsoup和domj4的简单使用
- Jsoup的简单的使用示例
- 使用HttpClient和Jsoup进行简单数据抓取、解析
- android使用Jsoup进行html数据解析简单实例浅析
- Java使用Jsoup简单解析页面
- 使用JSoup解析HTML文件
- Java中使用开源库JSoup解析HTML文件实例
- 使用MD5加密注册用户密码的简单示例
- 蛙蛙推荐:在c#使用IOCP(完成端口)的简单示例
- 使用Digester解析XML文档示例
- Selenium-Rc使用简单示例
- [置顶] Skinned Mesh原理解析和一个最简单的实现示例
- 蛙蛙推荐:在c#使用IOCP(完成端口)的简单示例
- SPQuery简单使用示例
- SPQuery简单使用示例 (转)
- 解析Makefile --- 简单的Makefile示例
- AES类使用方法(内函简单示例)