Java爬虫系列:使用Jsoup解析HTML
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java爬虫系列:使用Jsoup解析HTML,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3850字,纯文字阅读大概需要6分钟。
内容图文
一、Jsoup自我介绍
我是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据,用Java写爬虫的同行们十之八九用过我。为什么呢?因为我在这个方面功能强大、使用方便。不信的话,可以继续往下看,代码是不会骗人的。
二、Jsoup解析html
一堆的代码,不是程序员的人们怎么能看懂呢?这个就需要我这个html解析专家出场了。
下面通过案例展示如何使用Jsoup进行解析,案例中将获取博客园首页的标题和第一页的博客文章列表
- 引入依赖
<dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.12.1</version> </dependency>
- 实现代码。实现代码之前首先要分析下html结构。标题是<title>不用说了,那文章列表呢?按下浏览器的F12,查看页面元素源码,你会发现列表是一个大的div,id="post_list",每篇文章是小的div,class="post_item"
接下来就可以开始代码了,Jsoup核心代码如下(整体源码会在文章末尾给出):
/** * 下面是Jsoup展现自我的平台 */ //6.Jsoup解析html Document document = Jsoup.parse(html); //像js一样,通过标签获取title System.out.println(document.getElementsByTag("title").first()); //像js一样,通过id 获取文章列表元素对象 Element postList = document.getElementById("post_list"); //像js一样,通过class 获取列表下的所有博客 Elements postItems = postList.getElementsByClass("post_item"); //循环处理每篇博客 for (Element postItem : postItems) { //像jquery选择器一样,获取文章标题元素 Elements titleEle = postItem.select(".post_item_body a[class='titlelnk']"); System.out.println("文章标题:" + titleEle.text());; System.out.println("文章地址:" + titleEle.attr("href")); //像jquery选择器一样,获取文章作者元素 Elements footEle = postItem.select(".post_item_foot a[class='lightblue']"); System.out.println("文章作者:" + footEle.text());; System.out.println("作者主页:" + footEle.attr("href")); System.out.println("*********************************"); }
根据以上代码你会发现,我通过Jsoup.parse(String html)方法对httpclient获取到的html内容进行解析获取到Document,然后document可以有两种方式获取其子元素:像js一样 可以通过getElementXXXX的方式 和 像jquery 选择器一样通过select()方法。 无论哪种方法都可以,我个人推荐用select方法处理。对于元素中的属性,比如超链接地址,可以使用element.attr(String)方法获取, 对于元素的文本内容通过element.text()方法获取。
- 执行代码,查看结果(不得不感慨博客园的园友们真是太厉害了,从上面分析首页html结构到Jsoup分析的代码执行完,这段时间首页多了那么多文章)
由于新文章发布的太快了,导致上面的截图和这里的输出有些不一样。
三、Jsoup的其他用法
我,Jsoup,除了可以在httpclient大哥的工作成果上发挥作用,我还能自己独立干活,自己抓取页面,然后自己分析。分析的本领已经在上面展示过了,下面来展示自己抓取页面,其实很简单,所不同的是我直接获取到的是document,不用再通过Jsoup.parse()方法进行解析了。
除了能直接访问网上的资源,我还能解析本地资源:
代码:
public static void main(String[] args) { try { Document document = Jsoup.parse(new File("d://1.html"), "utf-8"); System.out.println(document); } catch (IOException e) { e.printStackTrace(); } }
四、Jsoup另一个值得一提的功能
你肯定有过这种经历,在你的页面文本框中,如果输入html元素的话,保存后再查看很大概率会导致页面排版乱七八糟,如果能对这些内容进行过滤的话,就完美了。
刚好我Jsoup就能做到。
public static void main(String[] args) { String unsafe = "<p><a href='网址' onclick='stealCookies()'>博客园</a></p>"; System.out.println("unsafe: " + unsafe); String safe = Jsoup.clean(unsafe, Whitelist.basic()); System.out.println("safe: " + safe); }
通过Jsoup.clean方法,用一个白名单进行过滤。执行结果:
unsafe: <p><a href='网址' onclick='stealCookies()'>博客园</a></p> safe: <p><a rel="nofollow">博客园</a></p>
五、结束语
通过以上大家相信我很强大了吧,不仅可以解析HttpClient抓取到的html元素,我自己也能抓取页面dom,我还能load并解析本地保存的html文件。
此外,我还能通过一个白名单对字符串进行过滤,筛掉一些不安全的字符。
如果有想学习java的程序员,可来我们的java学习扣qun:830783865,免费送java的视频教程噢!我每晚上8点还会在群内直播讲解Java知识,欢迎大家前来学习哦
内容总结
以上是互联网集市为您收集整理的Java爬虫系列:使用Jsoup解析HTML全部内容,希望文章能够帮你解决Java爬虫系列:使用Jsoup解析HTML所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。