因为一些业务场景,,组内需要写一个简单的爬虫,来抓取某个网站的信息,于是我就问小帅们,有人会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整合某项技术,第一项一般都是——引入依赖
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.11.3</version>
</dependency>
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的简单使用