java爬虫之Jsoup

2025-11-22 00:40:49

因为一些业务场景,,组内需要写一个简单的爬虫,来抓取某个网站的信息,于是我就问小帅们,有人会Python吗?

答案是没有!!!

然后,我又问,有人接触过java爬虫框架吗?

答案还是没有!!!

也是java爬虫比较笨重,在这方面确实不如Python,但是技多不压身,我们还是要学习一下的!

Jsoup简述

Jsoup是一个用于解析、操作和清理HTML的Java库。它提供了一种便捷的API,可以从URL、文件或字符串中提取和处理HTML数据。Jsoup的功能类似于JavaScript中的jQuery,是为Java环境设计的。

jsoup算是一个应用起来比单的HTML解析库,但是简单就会有缺点

比如:

1:性能问题

对于非常大型的HTML文档,Jsoup的解析速度可能不如一些专门为高性能设计的解析器。此外,它在处理大量并发请求时可能会遇到性能瓶颈。

2:不支持javaScript

Jsoup无法执行或解析网页中的JavaScript。这意味着它无法处理依赖JavaScript生成内容的网页。如果你需要抓取动态内容,可能需要使用像Selenium这样的工具

3:内存消耗

因为Jsoup会将整个HTML文档加载到内存中,所以对于非常大的文档,内存消耗可能会很高

4:线程安全性

Jsoup的某些部分不是线程安全的,如果在多线程环境中使用,可能需要特别小心以避免并发问题。

但是他都安全了,而且我们也没有特别复杂的爬取需求,所以 还要什么自行车!!!

jsoup的使用

向Spring整合某项技术,第一项一般都是——引入依赖

org.jsoup

jsoup

1.11.3

jsoup不需要额外的配置文件,引入依赖加载后就可以直接使用

//获取连接

Connection connect = Jsoup.connect(url);

//直接发送get请求

Document document = Jsoup.connect(url).get();

//直接发送post请求

Document post = Jsoup.connect(url).post();

//有一些网页可能需要我们登录,这个时候就需要我们添加token或者cookie;

Document documentHaveCookie = Jsoup.connect(url)

.cookie("Cookie", "cookie")

.get();

上面获得的Document,顾名思义就是我们获得的页面文档,浏览器会将这个Document渲染到页面上,我们现在就是要解析这个巨大的文档字符串

现在我们看一下Document下面的方法

getElementById(String id):

作用:根据指定的id属性值获取对应的元素。返回值:表示指定id的元素,如果不存在则返回null。

getElementsByTag(String tag):

作用:根据指定的标签名获取所有对应的元素。返回值:包含所有指定标签的元素的列表。

getElementsByClass(String className):

作用:根据指定的类名获取所有对应的元素。返回值:包含所有指定类名的元素的列表。

select(String cssQuery):

作用:使用CSS选择器语法查询匹配的元素。返回值:包含所有匹配元素的列表。

title():

作用:获取HTML文档的标题。返回值:HTML文档的标题字符串。

head():

作用:获取HTML文档的head部分。返回值:表示HTML文档head部分的元素。

body():

作用:获取HTML文档的body部分。返回值:表示HTML文档body部分的元素。

html():

作用:获取整个HTML文档的HTML内容。返回值:整个HTML文档的HTML字符串。

text():

作用:获取整个HTML文档的纯文本内容。返回值:整个HTML文档的纯文本字符串。

Document的Select方法

上面列举的方法大多都比较好理解,这里主要讲一下使用次数最多,并且可以灵活选择和定位元素的select方法

看我这里的代码:

Document doc = Jsoup.connect(url)

.cookie("Cookie", admin.getCookie())

.get();

Elements selectList = doc.select("div[class~=^item]");

这里可以获得上面获取到的网页文档中所有class以item开头属性的div标签

为了方便理解在贴出一些代码

这是在上面活动Elements循环获得每一块进行处理

Element name = element.select("a[class~=^name]").first();

//获取a标签内的href属性

String href = name.attr("href");

这里是获得当前选中元素内第一个class以name开头的a标签

然后使用attr方法获取a标签内href的属性值

这写就是关于Jsoup的简单使用