java爬虫Jsoup主要类及功能使用详解
作者:刨红薯的小羊竿尔 发布时间:2023-09-26 18:02:25
一、Jsoup的主要功能
Jsoup是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
从一个URL,文件或字符串中解析HTML
使用DOM或CSS选择器来查找、取出数据
可操作HTML元素、属性、文本
根据安全的白名单清理用户提交的内容,以防止XSS攻击
输出整洁的HTML
二、Jsoup的主要类
1. org.jsoup.Jsoup类
Jsoup类是任何Jsoup程序的入口点,并将提供从各种来源加载和解析HTML文档的方法。
static Connection connect(String url) | 创建并返回URL的连接。 |
---|---|
static Document parse(File in, String charsetName) | 将指定的字符集文件解析成文档。 |
static Document parse(String html) | 将给定的html代码解析成文档。 |
static String clean(String bodyHtml, Whitelist whitelist) | 从输入HTML返回安全的HTML,通过解析输入HTML并通过允许的标签和属性的白名单进行过滤。 |
2. org.jsoup.nodes.Document类
该类表示通过Jsoup库加载HTML文档。可以使用此类执行适用于整个HTML文档的操作。
3. org.jsoup.nodes.Element类
HTML元素是由标签名称,属性和子节点组成。 使用Element类,您可以提取数据,遍历节点和操作HTML。
三、Jsoup使用
1.maven引入
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.10.2</version>
</dependency>
2.加载文档
Document document = Jsoup.connect("http://www.yiibai.com").get();
Document document = Jsoup.parse( new File( "D:/temp/index.html" ) , "utf-8" );```
String html = "<html><head><title>First</title></head><body><p>Parsed</p></body></html>";
Document document = Jsoup.parse(html);
3.解析文档
根据id查询元素 getElementById
根据标签获取元素 getElementsByTag
根据class获取元素 getElementsByClass
根据属性获取元素 getElementsByAttribute
// 解析文件,获取doc对象
Document doc = Jsoup.parse(new File("C:\\Users\\myqxin\\Desktop\\set.html"), "utf8");
// 1,根据id查询元素 getElementById
Element element1 = doc.getElementById("people");
// 2,根据标签获取元素 getElementsByTag
Element element2 = doc.getElementsByTag("span").first();
// 3,根据class获取元素 getElementsByClass
Element element3 = doc.getElementsByClass("").first();
// 4,根据属性获取元素 getElementsByAttribute
Element element4 = doc.getElementsByAttribute("").last();
// 根据属性和属性值获取 Element element5 = doc.getElementsByAttributeValue("abc","123").last();
4.使用选择器获取元素
selector选择器概述
tagname:通过标签查找元素,比如:span
#id:通过ID查找元素,比如:#myqxin
.class:通过class名称查找元素,比如:class_a
[attribute]:利用属性查找元素,比如:[abc]
[attr=value]:利用属性值查询元素,比如:[class=s_name]
ns|tag: 通过标签在命名空间查找元素,比如:可以用 fb|name 语法来查找 fb:name 元素
[attr^=value], [attr$=value], [attr*=value]: 利用匹配属性值开头、结尾或包含属性值来查找元素,比如:[href*=/path/]
[attr~=regex]: 利用属性值匹配正则表达式来查找元素,比如: img[src~=(?i).(png|jpe?g)]
*: 这个符号将匹配所有元素
Selector选择器组合使用
el#id: 元素+ID,比如: div#logo
el.class: 元素+class,比如: div.masthead
el[attr]: 元素+class,比如: a[href]
任意组合,比如:a[href].highlight
ancestor child: 查找某个元素下子元素,比如:可以用.body p 查找在"body"元素下的所有 p元素
parent > child: 查找某个父元素下的直接子元素,比如:可以用div.content > p 查找 p 元素,也可以用body > * 查找body标签下所有直接子元素
siblingA + siblingB: 查找在A元素之前第一个同级元素B,比如:div.head + div
siblingA ~ siblingX: 查找A元素之前的同级X元素,比如:h2 ~ p
el, el, el:多个选择器组合,查找匹配任一选择器的唯一元素,例如:div.masthead, div.logo
伪选择器selectors
:lt(n): 查找哪些元素的同级索引值(它的位置在DOM树中是相对于它的父节点)小于n,比如:td:lt(3) 表示小于三列的元素
:gt(n):查找哪些元素的同级索引值大于n,比如: div p:gt(2)表示哪些div中有包含2个以上的p元素
:eq(n): 查找哪些元素的同级索引值与n相等,比如:form input:eq(1)表示包含一个input标签的Form元素
:has(seletor): 查找匹配选择器包含元素的元素,比如:div:has(p)表示哪些div包含了p元素
:not(selector): 查找与选择器不匹配的元素,比如: div:not(.logo) 表示不包含 class="logo" 元素的所有 div 列表
:contains(text): 查找包含给定文本的元素,搜索不区分大不写,比如: p:contains(jsoup)
:containsOwn(text): 查找直接包含给定文本的元素
:matches(regex): 查找哪些元素的文本匹配指定的正则表达式,比如:div:matches((?i)login)
:matchesOwn(regex): 查找自身包含文本匹配指定正则表达式的元素
注意:上述伪选择器索引是从0开始的
5. 处理元素数据
attr(String key)
获取和attr(String key, String value)
设置属性attributes()
获得所有属性id()
,className()
和classNames()
text()
获取和text(String value)
设置文本内容html()
获取和html(String value)
设置内部HTML内容outerHtml()
获取外部HTML值data()
获取数据内容(例如script
和style
标签)tag()
和tagName()
6.操纵HTML和文本
append(String html)
,prepend(String html)
appendText(String text)
,prependText(String text)
appendElement(String tagName)
,prependElement(String tagName)
html(String value)
7.从元素中提取属性,文本和HTML
在解析文档并找到一些元素之后,您将需要获取这些元素中的数据。
Element.id()
Element.tagName()
Element.className()
和Element.hasClass(String className)
来源:https://juejin.cn/post/7175338335357894714


猜你喜欢
- 1. C#实现复数类我们在进行信号分析的时候,难免会使用到复数。但是遗憾的是,C#没有自带的复数类,以下提供了一种复数类的构建方法。复数相比
- 本文实例讲述了基于C++实现的哈夫曼编码解码操作。分享给大家供大家参考,具体如下:哈夫曼编码是一个通过哈夫曼树进行的一种编码,一般情况下,以
- Oracle官网是这样介绍默认方法的,使用默认方法,可以达到往接口里面增加新的功能,而且保持与老版本代码兼容,也就是原来的实现类可以不需要被
- 要理解 C# 中的 volatile 关键字,就要先知道编译器背后的一个基本优化原理。比如对于下面这段代码:public class Exa
- 这篇文章主要介绍了MyBatis执行Sql的流程实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的
- instanceof关键字用于判断一个引用类型变量所指向的对象是否是一个类(或接口、抽象类、父类)的实例。 举个例子:public
- 一、RESTful 简介REST 是一种软件架构风格。REST:Representational State Transfer,表现层资源状
- 1 在图片上用鼠标进行操作,opencv主要用到setMouseCallback()函数。winname 窗口名称onMouse 鼠标事件的
- Mavan pom文件引用依赖 <!-- hutool工具类--><dependency><gro
- C#中Directory.GetFiles() 函数的使用C#中Directory.GetFiles(string path , strin
- 一、文件上传的必要前提A form 表单的 enctype 取值必须是:multipart/form-data(默认值是:applicati
- Spring内置 * 对于 Web 应用来说,ServletContext 对象是唯一的,一个 Web 应用,只有一个ServletCont
- 场景点击第一个Activity中的按钮,启动第二个Activity,关闭第二个Activity,返回到第一个Activity。在第一个Act
- GestureDetectorGestureDetector 是手势识别的组件,可以识别点击、双击、长按事件、拖动、缩放等手势点击事件点击相
- 方法如下:在窗体的Load事件注册滚动事件,并增加对应的方法private void FormSample_Load(object send
- 生成唯一值的方法很多,下面就不同环境下生成的唯一标识方法一一介绍,作为工作中的一次总结,有兴趣的可以自行测试:一、在 .NET 中生成1、直
- 这篇文章主要介绍了SpringBoot跨域Access-Control-Allow-Origin实现解析,文中通过示例代码介绍的非常详细,对
- C#都没人用了吗,网上想找个现成的雪花分形代码,都没找见,有C++,有python,有java的,就没有C#的,自己试试写一个吧。publi
- 发现问题最近在项目中刚刚修改一个功能,代码正准备验证,启动Idea的debug模式,运行项目,发现启动失败,查看日志发现定时任务被重复执行,
- 本文实例讲述了C#实现导出List数据到xml文件的方法。分享给大家供大家参考,具体如下:C#导出List数据到xml文件,这里主要用到的是