在Java中利用Okhttp3或hutool工具简单的爬取简书作者信息

387 阅读2分钟

在Java中利用Okhttp3简单的爬取简书作者信息

1.登录简书找到对应的api

第一步肯定是要先登录简书,然后打开浏览器的开发工具,即右键——》检查,然后查看network的所有请求,找到推荐作者的请求api,一般这种api请求的路径都是根据所请求的信息命名的,例如推荐作者的英文就是recommend,我们搜索之后就可以得到如下: image.png

里面的状态代码304表示服务端执行了get请求,但是文件未发生变化。

我们也可以先用测试工具请求测试下,看看数据到底对不对。

image.png

可以看出来数据没问题,那么接下来就看如何利用代码获得了。

2.查看请求头

这里我们就主要看两个,一个是Accept,另外一个就是User-Agent,两个分别代表的是:浏览器能够接收和响应的数据类型;浏览器类型和版本等数据。

我们找到请求标头下面的信息有: image.png

这两个信息先保存,等下有用。

3.代码爬取

package com.example.demo.interceptor;

import java.io.IOException;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;


public class Main {
    public static void main(String[] args){
        // 创建OkHttpClient实例
        OkHttpClient client = new OkHttpClient();

        // 创建Request
        Request request = new Request.Builder()
                .url("https://www.jianshu.com/users/recommended?seen_ids=&count=5&only_unfollowed=true") // 替换为你想要抓取的URL
                .addHeader("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36")
                .addHeader("Accept","application/json")
                .build();
        try {
            Response response = client.newCall(request).execute();
            if (response.isSuccessful() && response.body() != null) {
                String message = response.body().string();
                System.out.println(message);
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

这里别忘记添加依赖

<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>4.9.3</version> <!-- 请检查最新版本 -->
</dependency>

上面我们在请求头中添加了AcceptUser-Agent的相关消息,因为如果我们不添加User-Agent请求头的话,那么服务器那边是认为这个请求不是浏览器发出的,就直接拒绝掉了。但是如果只添加了User-Agent也无法获取响应,这时候我们可以多添加几个请求头,如上所示,但是一般只需要在添加个Accept即可,总之多试试就行了。

image.png


我们可以使用java的hutool工具来更简单的实现。

package com.example.demo.interceptor;

import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;

public class Main {
    public static void main(String[] args) {
        // 创建HTTP GET请求
        HttpResponse response = HttpRequest.get("https://www.jianshu.com/users/recommended?seen_ids=&count=5&only_unfollowed=true")
                .header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36")
                .header("Accept", "application/json")
                .execute();

        if (response.isOk()) { // 检查响应状态码是否为200
            String body = response.body(); // 获取响应体
            System.out.println(body);
        } else {
            System.err.println("请求失败:" + response.getStatus());
        }
    }
}

别忘记添加依赖

<!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all -->
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.25</version>
</dependency>