hutool包进行Java爬虫

news/2024/7/19 8:38:27 标签: java, 爬虫, 开发语言

使用hutool包进行爬虫其实就是使用包中的HttpUtil工具类发起网络请求,再使用ReUtil进行正则匹配将所需要的内容保存下来。接下来详细介绍下这两个工具类的使用。在使用之前我们先导入所需要的依赖,也可以通过jar包形式下载后添加到项目依赖中。

<!--hutool-->
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.7.17</version>
</dependency>

HttpUtil

Hutool 包中的 HttpUtil 类提供了方便的 HTTP 客户端工具,可以用于发送 HTTP 请求并获取响应结果。

发起请求
以下方法是HttpUtil中的
前三个方法是先构造请求的参数,包括url等,详细参数可以在下面的参数配置中设置,如请求头、编码等。注意这些方法并未发起请求,要想发起请求需要执行execute方法·。

  • createGet(String):创建 HTTP GET 请求,并设置请求 URL。

  • createPost(String):创建 HTTP POST 请求,并设置请求 URL。

  • createRequest(String, HttpMethod):根据指定的请求方法创建 HTTP 请求,并设置请求 URL。

  • execute():发送 HTTP 请求,并返回响应结果。

如果请求不需要额外配置参数,可以直接通过HttpUtil.get(url)发起请求,这是发起请求了,不再需要执行execute方法。

  • get():发起get请求
  • post():发起post请求

参数配置

java">HttpRequest getRequest = HttpUtil.createGet("https://www.baidu.com");

以下方法是配置在HttpRequest中的

  • timeout(int):设置 HTTP 请求的超时时间(单位为毫秒)。

  • header(String, String):设置 HTTP 请求头信息,一般都会设置"User-Agent"

  • setFollowRedirects(boolean):是否自动重定向。

  • form(Map<String, Object>):设置 HTTP POST 请求的表单数据。

  • body(String):设置 HTTP 请求体的内容。

  • charset(Charset):设置 HTTP 请求和响应的字符集编码。

这两个方法

  • downloadFile(String, OutputStream):下载文件并写入到指定的输出流中。

  • downloadFile(String, File):下载文件并保存到指定的文件中。

  • upload(String, File, String):上传文件。

以下是使用 HttpUtil 类发送 HTTP 请求的示例代码:

java">import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;

public class HttpUtilExample {
    public static void main(String[] args) {
        // 发送 HTTP GET 请求
        String getResponse = HttpUtil.get("https://www.baidu.com");
        System.out.println(getResponse);

        // 发送 HTTP POST 请求
        HttpResponse postResponse = HttpUtil.post("https://www.example.com", "username=admin&password=123456");
        System.out.println(postResponse.body());
    }
}

ReUtil

这个工具类从名字就可以看出来是对正则表达式的封装,ReUtil类提供了以下常用方法:

  • get: 根据指定正则表达式从字符串中获取匹配的结果,返回一个List集合。
  • getFirstNumber: 从字符串中提取第一个匹配的数字。
  • getNumbers: 从字符串中提取所有匹配的数字,返回一个List集合。
  • replace: 使用正则表达式替换字符串中匹配的部分。
  • replaceAll: 使用正则表达式替换字符串中所有匹配的部分。
  • contains: 判断字符串中是否包含匹配的部分。
  • isMatch: 判断字符串是否与指定的正则表达式匹配。
    正则匹配中用得最多的还是查找有关的,下面举个示例:
java">public static void main(String[] args) {

    HttpRequest request = HttpUtil.createGet("https://www.baidu.com/s?wd=龙猫&pn=10");

    request.header("User-Agent","jwoewwewe");
    HttpResponse response = request.execute();

    String title_reg = "\"titleUrl\":\"(.*?)\"";
    List<String> titleList = ReUtil.findAll(title_reg, response.body(),1);

    for(String title: titleList){
        System.out.println("---");
        System.out.println(title);
    }
}

上述代码中findAll是对响应体进行正则匹配,后面参数1是分组,如果指定为1表示不包含匹配字符,打印结果不包含titleUrl等匹配前缀,直接返回需要(.*?)中的匹配数据,为0表示包含titleUrl


http://www.niftyadmin.cn/n/5259510.html

相关文章

破晓6G新时代:迈向新一代星地融合的高速测试解决方案

1.面向未来下一代通信技术的射频测试挑战 移动通信网络的发展如下图所示&#xff0c;1G时代用模拟信号传输&#xff0c;实现了语音传输业务&#xff1b;2G时代&#xff0c;数字传输取代了模拟传输&#xff0c;人们能够使用手机短信和手机上网&#xff1b;3G时代&#xff0c;移…

【Debug小结】关于部署Java项目的Jar包到本地服务器失败

问题描述&#xff1a; 在Idea中完成项目编码后&#xff0c;使用Package打包成.jar文件 接下来使用cmd执行java -jar xxx 命令后 报错如下&#xff1a;Error: A JNI error has occurred, please check your installation and try again Exception in thread "main" j…

springboot_3.2_freemark_基础环境配置

springboot_3.2_freemark_基础环境配置 一、前言二、环境三、相关资料四、目标五、默认配置项六、构建springboot 3.2项目6.1 pom.xml 内容&#xff1a;6.2 启动类6.3 添加ftlh模板6.4 controller内容6.5 bootstrap.yml配置 七、总结 一、前言 FreeMarker 是一款模板引擎&…

MySQL——库,表基础操作

目录 一.库的操作 1.显示当前的数据库列表 2.创建数据库 3.字符集和校验规则 4.操纵数据库 5.删除数据库 6.数据库备份与还原 7.查看连接情况 二.表的操作 1.创建表 2.查看表结构 3.修改表 4.删除表 一.库的操作 1.显示当前的数据库列表 show databases; 2.创建数…

【力扣100】48.旋转图像

添加链接描述 class Solution:def rotate(self, matrix: List[List[int]]) -> None:n len(matrix)# Python 这里不能 matrix_new matrix 或 matrix_new matrix[:] 因为是引用拷贝matrix_new [[0] * n for _ in range(n)]for i in range(n):for j in range(n):matrix_ne…

学生管理系统 数据库版

如题&#xff1a; 一.SQL部分 a. b. c. 修改&#xff1a; 二.Java部分 代码&#xff1a; 结果

Unity中Shader语义的理解

前言 以下内容主要是个人理解&#xff0c;如有错误&#xff0c;欢迎严厉批评指正。 一、语义的形式在Shader中是必要的吗&#xff1f; 不是必要的。 使用HLSL和CG语言来编写Shader需要语义&#xff0c;使用GLSL编写Shader不需要。 二、语义的意义&#xff1f; 语义是什么&…

python 基于imageio_ffmpeg 直接操作ffmpeg,无需额外在官网下载!

python直接操作ffmpeg&#xff0c;无需在官网下载&#xff01; 一、前言 在要使用ffmpeg处理的时候&#xff0c;不想去官网下载ffmpeg然后添加到环境变量再使用。研究了一下&#xff0c;可以通过下面的方法解决 imageio_ffmpeg subprocess 二、具体步骤 1、环境配置 pip i…