我们抓取到页面后,还需要对页面进行解析。可以使用字符串处理工具解析页面,也可以使用正则表达式,但是这些技术都会带来很大的开发成本,所以我们需要一款专门解析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相关推荐

  1. 关于Jsoup解析https网页的问题

    针对Jsoup解析https网页,网上的一段源码执行后并不能实现成功访问. import java.net.MalformedURLException; import java.net.URL; im ...

  2. Jsoup介绍||​​​​​​​jsoup解析url || Jsoup解析字符串||​​​​​​​Jsoup解析文件

    Jsoup 抓取到页面之后,还需要对页面进行解析.可以使用字符串处理工具解析页面,也可以使用正则表达式,但是这些方法都会带来很大的开发成本,所以我们需要使用一款专门解析html页面的技术. jsoup ...

  3. Android利用Jsoup解析html 开发网站客户端小记。

    这些天业余时间比较多,闲来无事,想起了以前看过开发任意网站客户端的一篇文章,就是利用jsoup解析网站网页,通过标签获取想要的内容.好了废话不多说,用到的工具为 jsoup-1.7.2.jar包,具体 ...

  4. 【爬蟲】使用Jsoup解析文档

    [爬蟲]使用Jsoup解析文档

  5. Android开发探秘之三:利用jsoup解析HTML页面

    这节主要是讲解jsoup解析HTML页面.由于在android开发过程中,不可避免的涉及到web页面的抓取,解析,展示等等,所以,在这里我主要展示下利用jsoup jar包来抓取cnbeta.com网 ...

  6. Andorid中使用Jsoup解析库解析XML、HTML、Dom节点---第三方库学习笔记(三)

    XML介绍: XML简介: XML,可扩展标记语言,标准通用标记语言的子集. 一种用于标记电子文件使其具有结构性的标记语言. 它可以用来标记数据.定义数据类型 是一种允许用户对自己的标记语言进行定义的 ...

  7. XML解析——Jsoup解析器

    一.Jsoup解析器快速入门案例 Docement对象,文本对象,包含着各个Dom树结构 1.引入Jsoup解析器的jar包放在lib文件夹下后,写java代码 其中, 二.Jsoup对象 1.Jso ...

  8. Jsoup解析HTML实例及文档方法详解

    转载自  Jsoup解析HTML实例及文档方法详解 这篇文章主要介绍了Jsoup如何解析一个HTML文档.从文件加载文档.从URL加载Document等方法,对Jsoup常用方法做了详细讲解,最近提供 ...

  9. jsoup解析HTML用法小结

    转载自   jsoup解析HTML用法小结 使用HttpClient+jsoup做采集器有一段时间了,发现jsoup很好用,而且还有很多方便的东西都没怎么用上.于是想根据官网上的cookbook来对j ...

  10. java jsoup解析_3使用Jsoup解析Java中HTML文件的示例

    java jsoup解析 HTML是Web的核心,无论您是通过JavaScript,JSP,PHP,ASP或任何其他Web技术动态生成的,您在Internet上看到的所有页面都是基于HTML的. 您的 ...

最新文章

  1. BCH智能合约进程持续推进 新方案接连被推出
  2. 彻底理解乐观锁和悲观锁的区别
  3. 超长整数相加 c语言类,二个超长正整数的相加
  4. 深入理解低功耗蓝牙的配对过程- Part 2 Key Generation Methods
  5. Delphi利用MSCOMM控件进行GPS数据采集
  6. 【顶尖技术人是怎样炼成的】清华博士的模型信仰——对话阿里云 MVP陈旸
  7. js合并同类数组里面的对象_通过同类群组保留估算客户生命周期价值
  8. 多git帐号的SSH key切换
  9. 郝斌java_郝斌Java自学教程全集打包
  10. 谁在维护linux内核,故意向Linux内核中提及漏洞? Linux 内核维护者封杀明尼苏达大学...
  11. 【文件加密】电脑文件夹简单加密教程
  12. .java.smap_利用Java Binary Webshell对抗静态检测
  13. html预览页面做成a4纸,html页面,A4纸竖向打印,网页页面的宽度应该设置成多少?...
  14. 淘宝开店不看这个,难怪你不挣钱!
  15. 计算机网络之『路由器的配置』
  16. P6225 [eJOI2019] 异或橙子
  17. mysql创建新闻发布时间_基于PHP+mysql实现新闻发布系统的开发
  18. 查询数据(后台到前台传递数据,显示数据)
  19. 奇特的一生--时间管理法
  20. 合宙 ESP32C3 使用micropython 驱动配套0.96寸 TFT ST7735 屏幕显示色块和文字

热门文章

  1. [密码学] 因子分解
  2. buu [BJDCTF 2020]这是base??
  3. 【django】关联查询
  4. python中__init__和__new__方法的使用
  5. [mmu/cache]-MMU的地址翻译(Address translation)指令介绍
  6. 人工智能-基于U^2-Net的肖像画生成算法
  7. ECC-based 算法(ECDSA/ECDH) 新潮算法的原理
  8. VC6导入和使用二进制资源
  9. 1.5 对象类型转换:向上转型和向下转型
  10. 1.7 Java到底有没有多维数组?