Jsoup

  • jsoup 介绍
    • 1,准备环境,导入所需依赖
    • 2,获取网页第一个title标签的文本内容
    • 3,jsoup解析字符串|文件
    • 4,使用dom 方式遍历文档
    • 5,使用选择器获取元素
    • 6,select选择器组合使用

jsoup 介绍

jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。

jsoup的主要功能如下:

  1. 从一个URL,文件或字符串中解析HTML;
  2. 使用DOM或CSS选择器来查找、取出数据;
  3. 可操作HTML元素、属性、文本;( Jsoup一般用于解析爬到的数据并存储, 很少用到操作 )

1,准备环境,导入所需依赖

     <dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.13.1</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.4</version></dependency>

2,获取网页第一个title标签的文本内容

     // 解析Url地址 参数1:访问的url,参数2:访问的超时时间Document doc = Jsoup.parse(new URL("http://www.myqxin.com"), 1000);// 使用选择器,获取想要的内容String title = doc.getElementsByTag("title").first().text();System.out.println(title);

虽然使用Jsoup可以替代HttpClient直接发起请求解析数据,但是往往不会这样用,因为实际的开发过程中,需要使用到多线程,连接池,代理等等方式,而jsoup对这些的支持并不是很好,所以我们一般把jsoup仅仅作为Html解析工具使用

3,jsoup解析字符串|文件

         // 使用工具类读取文件,获取字符串String context = FileUtils.readFileToString(new File("C:\\Users\\myqxin\\Desktop\\set.html"), "utf8");// 解析字符串Document doc = Jsoup.parse(context);// 解析文件//Document doc = Jsoup.parse(new File("C:\\Users\\myqxin\\Desktop\\set.html"), "utf8");String title = doc.getElementsByTag("title").first().text();System.out.println(title);

这里的set.html内容是自己测试用的内容,仅仅是为了演示,实际情况根据你们所接触到的页面而定

4,使用dom 方式遍历文档

元素获取

1,根据id查询元素 getElementById

2,根据标签获取元素 getElementsByTag

3,根据class获取元素 getElementsByClass

4,根据属性获取元素 getElementsByAttribute

     // 解析文件,获取doc对象Document doc = Jsoup.parse(new File("C:\\Users\\myqxin\\Desktop\\set.html"), "utf8");// 1,根据id查询元素 getElementByIdElement element1 = doc.getElementById("people");// 2,根据标签获取元素 getElementsByTagElement element2 = doc.getElementsByTag("span").first();// 3,根据class获取元素 getElementsByClassElement element3 = doc.getElementsByClass("").first();// 4,根据属性获取元素 getElementsByAttributeElement element4 = doc.getElementsByAttribute("").last();// 根据属性和属性值获取Element element5 = doc.getElementsByAttributeValue("abc","123").last();

元素中的数据获取

1,从元素中获取id

2,从元素中获取className

3,从元素中获取属性的值 attr

4,从元素中获取所有属性 attributes

5,从元素中获取文本内容 text

     // 解析文件,获取doc对象Document doc = Jsoup.parse(new File("C:\\Users\\myqxin\\Desktop\\set.html"), "utf8");// 1,根据id查询元素 getElementByIdElement element = doc.getElementById("people");// 1,从元素中获取idString str1 = element.id();// 2,从元素中获取classNameString str2 = element.className();// 3,从元素中获取属性的值 attrString str3 = element.attr("id");// 4,从元素中获取所有属性 attributesAttributes str4 = element.attributes();// 5,从元素中获取文本内容 textString str5 = element.text();

5,使用选择器获取元素

selector选择器概述

tagname:通过标签查找元素,比如:span

#id:通过ID查找元素,比如:#myqxin

.class:通过class名称查找元素,比如:class_a

[attribute]:利用属性查找元素,比如:[abc]

[attr=value]:利用属性值查询元素,比如:[class=s_name]

     // 解析文件,获取doc对象Document doc = Jsoup.parse(new File("C:\\Users\\myqxin\\Desktop\\set.html"), "utf8");// tagname:通过标签查找元素,比如:spanElements spans = doc.select("span");// #id:通过ID查找元素,比如:#myqxinElement first = doc.select("#myqxin").first();// .class:通过class名称查找元素,比如:class_aElement last = doc.select(".class_a").last();// [attribute]:利用属性查找元素,比如:[abc]Elements select = doc.select("[abc]");// [attr=value]:利用属性值查询元素,比如:[class=s_name]Elements elements1 = doc.select("[class=s_name]");Elements elements2 = doc.select("[id=myqxin]");

6,select选择器组合使用

el#id:元素+ID,比如:h3#myqxin

el.class:元素+class,比如:li.class_a

el[attr]:元素+属性名,比如:span[abc]

任意组合:比如:span[abc].s_name

ancestor child:查找某个元素下子元素,比如:.city_con li 查询“city_con”下的所有li

parent > child:查找某个父元素下的直接子元素,比如.city_con > ul > li 查找city_con 第一级(直接子元素)的 ul,再找所有ul 下的第一级li

parent > * :查找某个父元素下所有直接子元素

         // 解析文件,获取doc对象Document doc = Jsoup.parse(new File("C:\\Users\\myqxin\\Desktop\\set.html"), "utf8");// el#id:元素+ID,比如:h3#myqxinElements select1 = doc.select("h3#myqxin");// el.class:元素+class,比如:li.class_aElements select2 = doc.select("li.class_a");// el[attr]:元素+属性名,比如:span[abc]Elements select3 = doc.select("span[abc]");// 任意组合:比如:span[abc].s_nameElements select4 = doc.select("span[abc].s_name");// ancestor child:查找某个元素下子元素,比如:.city_con li 查询“city_con”下的所有liElements select5 = doc.select(".city_con li");// parent > child:查找某个父元素下的直接子元素,比如.city_con > ul > li 查找city_con 第一级(直接子元素)的 ul,再找所有ul 下的第一级liElements select6 = doc.select(".city_con > ul > li");// parent > * :查找某个父元素下所有直接子元素Elements select7 = doc.select(".city_con > *");

java爬虫(二)- Jsoup相关推荐

  1. Java爬虫之JSoup使用教程

    title: Java爬虫之JSoup使用教程 date: 2018-12-24 8:00:00 +0800 update: 2018-12-24 8:00:00 +0800 author: me c ...

  2. Java 爬虫工具Jsoup解析

    Jsoup是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址.HTML 文本内容.它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和 ...

  3. java爬虫框架jsoup

    1.java爬虫框架的api jsoup:https://www.open-open.com/jsoup/ 转载于:https://www.cnblogs.com/wuzaipei/p/1057266 ...

  4. java爬虫利器Jsoup的使用

    对于长期使用java做编程的程序猿应该知道,java支持的爬虫框架还是有很多的,如:ebMagic.Spider.Jsoup等.今天我们就用Jsoup来实现一个小小的爬虫程序,Jsoup作为kava的 ...

  5. java爬虫之Jsoup入门

    网络爬虫 网络爬虫概念 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁. ...

  6. JAVA爬虫案例——JSOUP爬取图片并使用v-viewer实现图片预览

    前言 网络爬虫是大数据时代收集数据的一种有效手段,合理合法的运用技术手段获取网络数据,实现数据的再利用也是程序员的一项重要技能.本节我们使用java环境下的jsoup实现网络数据的爬取,主要是图片数据 ...

  7. 【java爬虫】jsoup爬取网页数据-搜索算法评测/竞品评测

    百度抽奖概率改4个小时频繁黑屏频繁弹出源码的前端FE T8李森:请云端高level的同学参加会议...对,我级别到了... 666666 业务背景:如何保证搜索算法的好坏?所以有了竞品评测,自己的AP ...

  8. 【Java爬虫】Jsoup

    官网 中文使用手册 jsoup.jar官网下载 jsoup.jar百度网盘下载 提取码:g6ek jsoup是一款Java的HTML解析器,主要用来对HTML解析,可直接解析某个URL地址.HTML文 ...

  9. Java爬虫之jsoup的使用

    背景 获取所有双色球数据,但是返回的都是html页面,需要进行处理,最开始想着用dom4j处理,发现不可行.之后想着自己处理,但是又太麻烦了,然后找到了jsoup,使用起来非常简单. jsoup的作用 ...

  10. Java爬虫(二)-- httpClient模拟Http请求+jsoup页面解析

    博客 学院 下载 GitChat TinyMind 论坛 APP 问答 商城 VIP会员 活动 招聘 ITeye 写博客 发Chat 传资源 登录注册 原 Java爬虫(二)-- httpClient ...

最新文章

  1. 南京晓庄学院大一第二学期计算机数据结构期末考试试卷及答案,南京晓庄学院数据结构题库参考答案.docx...
  2. 未解决计算机主机与打印机,电脑无法与打印机连接 计算机网考题目2(12)
  3. java string.join找不到_Java String join()用法及代码示例
  4. ICCV 2019丨基于跨视角信息融合的三维人体姿态估计
  5. android屏幕亮度权限,安卓支持将屏幕亮度设为0的方法。
  6. 【机器学习基础】正规方程法(Normal equation)(正则化和非正则化)——吴恩达课程笔记
  7. 关于ECMWF和ERA5没有近地面相对湿度数据的解决办法
  8. 【CV细粒度识别论文总结】The Devil is in the Channels: Mutual-Channel Loss for Fine-Grained Image Classification
  9. ASCII码的转换应用:
  10. PDF文档用什么软件打开?
  11. 前端上传图片到七牛云
  12. Win10自带的备份工具备份系统
  13. whose引导的定语从句,先行词是复数形式,从句里谓语动词用单数还是复数?
  14. ODT在手,DDR5布线可以任性走?
  15. java判断文件夹中的图片是否重复
  16. landsat8与sentinel2波段对比
  17. Unity5权威讲解之菜鸟读书笔记(一)
  18. 启xin宝app的token算法破解——逆向篇(二)
  19. Python_RuntimeError问题的解决
  20. 【Linux】循序渐进学运维-服务篇-与tomcat相关的概念

热门文章

  1. Dynamics AX2012 SSRS报表添加功能(通用)
  2. 软件设计工程——数据库设计
  3. 鼠标屏幕取词技术的原理和实现 (转)
  4. Ubuntu16.04安装teamver14.1.3
  5. 软件测试常问面试题--计算机网络相关
  6. 查看python的模块和函数帮助文档方法
  7. Java常见的8种数据结构
  8. CVPR2020-深度图超分辨率DSR新方法| Channel Attention based Iterative Residual Learning for Depth Map SR
  9. 用户名 不在 sudoers 文件中。此事将被报告。
  10. 神经网络在游戏中的应用,神经网络控制应用实例