使用jsoup解析html
我们抓取到页面后,还需要对页面进行解析。可以使用字符串处理工具解析页面,也可以使用正则表达式,但是这些技术都会带来很大的开发成本,所以我们需要一款专门解析html页面的技术。
jsoup是一款java的html解析器,可以直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似Jquery的操作方法来取出和操作数据。
jsoup的主要功能如下:
从一个URL,文件或者字符串中解析HTML
使用DOM或CSS选择器来查找、取出数据
可操作HTML元素、属性、文本
(1)加入pom依赖
<dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.10.2</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.6</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.7</version></dependency>
(2)解析url
@Testpublic void testUrl() throws Exception {//解析URL地址Document doc= Jsoup.parse(new URL("https://movie.douban.com"),1000);//获取第一个title标签内的内容String title=doc.getElementsByTag("title").first().text();System.out.println(title);}
虽然使用jsoup可以替代HttpClient直接发起请求解析数据,但是往往不会这样用,因为实际的开发过程中,需要使用到多线程,连接池,代理等方式,而jsoup对这些的支持不是很好,所以我们一般只把jsoup当做html解析工具使用
(3)解析字符串
这里我们将豆瓣电影250的网站html保存下来,然后利用commons-io包的工具类获取该html的字符串
@Testpublic void testString() throws Exception {//使用工具类读取文件,获取字符串String content = FileUtils.readFileToString(new File("C:\\Users\\Desktop\\学习\\豆瓣电影 Top 250.html"), "utf8");//解析字符串Document doc = Jsoup.parse(content);String title = doc.getElementsByTag("title").first().text();System.out.println(title);
}
(4)解析文件
@Testpublic void testFile() throws Exception{//解析文件Document doc = Jsoup.parse(new File("C:\\Users\\Desktop\\学习\\豆瓣电影 Top 250.html"), "utf8");String title = doc.getElementsByTag("title").first().text();System.out.println(title);}
(5)使用dom方式遍历文档
功能 | 方法 |
---|---|
根据id查询元素 | getElementById |
根据标签获取元素 | getElementsByTag |
根据class获取元素 | getElementsByClass |
根据属性获取元素 | getElementsByAttribute |
@Testpublic void testDom() throws Exception{//解析文件Document doc = Jsoup.parse(new File("C:\\Users\\Desktop\\学习\\豆瓣电影 Top 250.html"), "utf8");//1.根据id获取元素String element = doc.getElementById("content").text();System.out.println(element);//2.根据标签获取元素String title = doc.getElementsByTag("title").first().text();System.out.println(title);//3.根据class获取元素String element2 = doc.getElementsByClass("inp-btn").first().text();System.out.println(element2);//4.根据属性获取元素String element3 = doc.getElementsByAttribute("href").first().text();System.out.println(element3);String element4 = doc.getElementsByAttributeValue("href","https://movie.douban.com/subject/1292052/").text();System.out.println(element4);}
(6)从元素中获取数据
@Testpublic void testData() throws Exception {//解析文件Document doc = Jsoup.parse(new File("C:\\Users\\Desktop\\学习\\豆瓣电影 Top 250.html"), "utf8");//根据id获取数据Element element = doc.getElementById("top-nav-appintro");String str = "";//1.从元素中获取Idstr = element.id();System.out.println(str);//2.从元素中获取classNamestr = element.className();System.out.println(str);Set<String> classSet = element.classNames();for (String s : classSet) {System.out.println(s);}//3.从元素中获取属性的值String id = element.attr("class ");//4.从元素中获取所有属性Attributes attributes = element.attributes();System.out.println(attributes.toString());//5.从元素中获取文本内容textstr = element.text();System.out.println(str);}
(7)Selector选择器
功能 | 语法 |
---|---|
通过标签查找元素 | tagname |
通过Id查找元素 | #id |
通过class名称查找元素 | .class |
通过属性查找元素 | [attribute] |
通过属性值查找元素 | [attr=value] |
@Testpublic void testSelector() throws Exception{//解析文件Document doc = Jsoup.parse(new File("C:\\Users\\杨峰宇\\Desktop\\学习\\豆瓣电影 Top 250.html"), "utf8");//通过标签查找元素Elements elements = doc.select("span");for (Element element : elements) {System.out.println(element.text());}System.out.println("==================");//通过id查找元素,比如#idElements elements1 = doc.select("#top-nav-appintro");System.out.println(elements1.first().text());System.out.println("==================");//通过class元素查找元素,比如.classElements elements2 = doc.select(".inp-btn");for (Element element : elements2) {System.out.println(element.text());}System.out.println("==================");//通过属性查找元素,比如[abc]Elements elements3 = doc.select("[href]");for (Element element : elements3) {System.out.println(element.text());}System.out.println("==================");//通过属性值来查找元素,比如[abc=123]Elements elements4 = doc.select("[class=pic]");for (Element element : elements4) {System.out.println(element.text());}}
使用jsoup解析html相关推荐
- 关于Jsoup解析https网页的问题
针对Jsoup解析https网页,网上的一段源码执行后并不能实现成功访问. import java.net.MalformedURLException; import java.net.URL; im ...
- Jsoup介绍||jsoup解析url || Jsoup解析字符串||Jsoup解析文件
Jsoup 抓取到页面之后,还需要对页面进行解析.可以使用字符串处理工具解析页面,也可以使用正则表达式,但是这些方法都会带来很大的开发成本,所以我们需要使用一款专门解析html页面的技术. jsoup ...
- Android利用Jsoup解析html 开发网站客户端小记。
这些天业余时间比较多,闲来无事,想起了以前看过开发任意网站客户端的一篇文章,就是利用jsoup解析网站网页,通过标签获取想要的内容.好了废话不多说,用到的工具为 jsoup-1.7.2.jar包,具体 ...
- 【爬蟲】使用Jsoup解析文档
[爬蟲]使用Jsoup解析文档
- Android开发探秘之三:利用jsoup解析HTML页面
这节主要是讲解jsoup解析HTML页面.由于在android开发过程中,不可避免的涉及到web页面的抓取,解析,展示等等,所以,在这里我主要展示下利用jsoup jar包来抓取cnbeta.com网 ...
- Andorid中使用Jsoup解析库解析XML、HTML、Dom节点---第三方库学习笔记(三)
XML介绍: XML简介: XML,可扩展标记语言,标准通用标记语言的子集. 一种用于标记电子文件使其具有结构性的标记语言. 它可以用来标记数据.定义数据类型 是一种允许用户对自己的标记语言进行定义的 ...
- XML解析——Jsoup解析器
一.Jsoup解析器快速入门案例 Docement对象,文本对象,包含着各个Dom树结构 1.引入Jsoup解析器的jar包放在lib文件夹下后,写java代码 其中, 二.Jsoup对象 1.Jso ...
- Jsoup解析HTML实例及文档方法详解
转载自 Jsoup解析HTML实例及文档方法详解 这篇文章主要介绍了Jsoup如何解析一个HTML文档.从文件加载文档.从URL加载Document等方法,对Jsoup常用方法做了详细讲解,最近提供 ...
- jsoup解析HTML用法小结
转载自 jsoup解析HTML用法小结 使用HttpClient+jsoup做采集器有一段时间了,发现jsoup很好用,而且还有很多方便的东西都没怎么用上.于是想根据官网上的cookbook来对j ...
- java jsoup解析_3使用Jsoup解析Java中HTML文件的示例
java jsoup解析 HTML是Web的核心,无论您是通过JavaScript,JSP,PHP,ASP或任何其他Web技术动态生成的,您在Internet上看到的所有页面都是基于HTML的. 您的 ...
最新文章
- BCH智能合约进程持续推进 新方案接连被推出
- 彻底理解乐观锁和悲观锁的区别
- 超长整数相加 c语言类,二个超长正整数的相加
- 深入理解低功耗蓝牙的配对过程- Part 2 Key Generation Methods
- Delphi利用MSCOMM控件进行GPS数据采集
- 【顶尖技术人是怎样炼成的】清华博士的模型信仰——对话阿里云 MVP陈旸
- js合并同类数组里面的对象_通过同类群组保留估算客户生命周期价值
- 多git帐号的SSH key切换
- 郝斌java_郝斌Java自学教程全集打包
- 谁在维护linux内核,故意向Linux内核中提及漏洞? Linux 内核维护者封杀明尼苏达大学...
- 【文件加密】电脑文件夹简单加密教程
- .java.smap_利用Java Binary Webshell对抗静态检测
- html预览页面做成a4纸,html页面,A4纸竖向打印,网页页面的宽度应该设置成多少?...
- 淘宝开店不看这个,难怪你不挣钱!
- 计算机网络之『路由器的配置』
- P6225 [eJOI2019] 异或橙子
- mysql创建新闻发布时间_基于PHP+mysql实现新闻发布系统的开发
- 查询数据(后台到前台传递数据,显示数据)
- 奇特的一生--时间管理法
- 合宙 ESP32C3 使用micropython 驱动配套0.96寸 TFT ST7735 屏幕显示色块和文字
热门文章
- [密码学] 因子分解
- buu [BJDCTF 2020]这是base??
- 【django】关联查询
- python中__init__和__new__方法的使用
- [mmu/cache]-MMU的地址翻译(Address translation)指令介绍
- 人工智能-基于U^2-Net的肖像画生成算法
- ECC-based 算法(ECDSA/ECDH) 新潮算法的原理
- VC6导入和使用二进制资源
- 1.5 对象类型转换:向上转型和向下转型
- 1.7 Java到底有没有多维数组?