浅浅谈谈如何利用Javase+多线程+计算机网络的知识做一个爬CSDN阅读量总访问量的程序

目录

我们发现csdn的文章

首先为了印证我们的想法

我们用postman往csdn我们任意一篇文章发起post请求

发送请求

​编辑获得响应结果

我们发现我们的阅读量上涨

PostRequestSender类

但是我们经过测试发现

[定义一个字符串数组 把URL放进去](#定义一个字符串数组 把URL放进去)

然后延迟启动

在线程池里面设置任务的延迟和每次执行的间隔

主方法代码

博客的阅览量也在增长

然而为了防止被网站监测出来

我们可以采取其他策略

比如说往请求体里面塞一个随机数

[注意不要写的太复杂 防止电脑卡爆](#注意不要写的太复杂 防止电脑卡爆)

个人号推广

博客主页

Web后端开发

Web前端开发

数据库开发

项目实战

算法与数据结构

计算机基础

回忆录


我们发现csdn的文章

只要你点进去

就会增长阅读量

结合我们学习的计算机网络相关知识

不难猜测是只要向网页发送post请求

就能获得一次阅读量的增长。

POST请求是HTTP协议中的一种方法,用于向服务器提交数据,通常用于创建或更新资源,或者执行一些操作,比如提交表单数据、上传文件等。在Web开发中,POST请求比GET请求更安全,因为它将数据包含在请求体中,而不是像GET请求一样在URL中可见。

首先为了印证我们的想法

我们用postman往csdn我们任意一篇文章发起post请求

打开postman

发送请求

获得响应结果

我们发现我们的阅读量上涨

证实了我们的想法

我们只要往文章发送请求就行

利用网络编程的知识

我们写个发起请求的类

PostRequestSender类

java 复制代码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.Random;

public class PostRequestSender {
    private String url;
    static long ans=0;
    public PostRequestSender(String url) {
        this.url = url;
    }

    public void sendPostRequest() throws IOException {
        // 创建URL对象
        URL obj = new URL(url);

        // 打开连接
        HttpURLConnection con = (HttpURLConnection) obj.openConnection();

        // 设置请求方法为POST
        con.setRequestMethod("POST");

        // 设置请求头

        con.setRequestProperty("User-Agent", "Java client");
        con.setRequestProperty("Content-Type", "application/json");

        // 可选:设置请求体
        Random random=new Random();
        int randomValue = random.nextInt(1000); // 生成一个0到999的随机整数
        String postData = "{\"key1\":\"value1\", \"key2\":\"" + randomValue + "\"}";
        con.setDoOutput(true);
        try (OutputStream os = con.getOutputStream()) {
            byte[] input = postData.getBytes(StandardCharsets.UTF_8);
            os.write(input, 0, input.length);
        }

        // 获取响应
        int responseCode = con.getResponseCode();
        System.out.println("Sending POST request to URL: " + url);
        System.out.println("Response Code: " + responseCode);
        System.out.println("run "+(ans++)+" ...");

        // 读取响应内容
        try (BufferedReader in = new BufferedReader(
                new InputStreamReader(con.getInputStream(), StandardCharsets.UTF_8))) {
            String inputLine;
            StringBuilder response = new StringBuilder();
            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
//            System.out.println("Response Body: " + response.toString());
        }
    }
}

但是我们经过测试发现

在同一时间内连续发送多次post请求

只会记录一次阅读量

这说明

CSDN自带有反爬的程序

我们可以规定在1分钟内依次爬取100篇文章

定义一个字符串数组 把URL放进去

然后延迟启动

利用的是多线程的知识

创建线程池

在线程池里面设置任务的延迟和每次执行的间隔

我们遍历数组

主方法代码

java 复制代码
import java.io.IOException;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class Main {

    public static void main(String[] args) throws Exception {
        String[] urls = {
                "https://blog.csdn.net/qq_30500575/article/details/139987333?spm=1001.2014.3001.5501",
                "https://blog.csdn.net/qq_30500575/article/details/139962431?spm=1001.2014.3001.5501",
                "https://blog.csdn.net/qq_30500575/article/details/139962247?spm=1001.2014.3001.5501",
                "https://blog.csdn.net/qq_30500575/article/details/139926411?spm=1001.2014.3001.5501",
                "https://blog.csdn.net/qq_30500575/article/details/139920678?spm=1001.2014.3001.5501",
                "https://blog.csdn.net/qq_30500575/article/details/139920678?spm=1001.2014.3001.5501",
                "https://blog.csdn.net/qq_30500575/article/details/139904327?spm=1001.2014.3001.5501",
                "https://blog.csdn.net/qq_30500575/article/details/139904250?spm=1001.2014.3001.5501",
                "https://blog.csdn.net/qq_30500575/article/details/139841808?spm=1001.2014.3001.5501",
                "https://blog.csdn.net/qq_30500575/article/details/139841808?spm=1001.2014.3001.5501",
                "https://blog.csdn.net/qq_30500575/article/details/139842155?spm=1001.2014.3001.5501",
                "https://blog.csdn.net/qq_30500575/article/details/139857617?spm=1001.2014.3001.5501",
                "https://blog.csdn.net/qq_30500575/article/details/139857996?spm=1001.2014.3001.5501",
                "https://blog.csdn.net/qq_30500575/article/details/139858097?spm=1001.2014.3001.5501"
                // Add more URLs as needed
        };

        // 创建定时执行的线程池
        ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);

        // 循环访问多个网址,并每隔20秒执行一次
        for (String url : urls) {
            Runnable task = () -> {
                try {
                    PostRequestSender sender = new PostRequestSender(url);
                    sender.sendPostRequest();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            };
            // 初始延迟10秒,每隔50秒执行一次任务
            executor.scheduleAtFixedRate(task, 10, 50, TimeUnit.SECONDS);
        }

        // 等待所有任务完成后关闭线程池
        executor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
        executor.shutdown();
    }
}

启动 查看控制台信息

注意联网哦

依次爬取打印

博客的阅览量也在增长

同时还会打印状态码和URL地址

然而为了防止被网站监测出来

我们可以采取其他策略

比如说往请求体里面塞一个随机数

注意不要写的太复杂 防止电脑卡爆

个人号推广

博客主页

多多!-CSDN博客

Web后端开发

https://blog.csdn.net/qq_30500575/category_12624592.html?spm=1001.2014.3001.5482

Web前端开发

https://blog.csdn.net/qq_30500575/category_12642989.html?spm=1001.2014.3001.5482

数据库开发

https://blog.csdn.net/qq_30500575/category_12651993.html?spm=1001.2014.3001.5482

项目实战

https://blog.csdn.net/qq_30500575/category_12699801.html?spm=1001.2014.3001.5482

算法与数据结构

https://blog.csdn.net/qq_30500575/category_12630954.html?spm=1001.2014.3001.5482

计算机基础

https://blog.csdn.net/qq_30500575/category_12701605.html?spm=1001.2014.3001.5482

回忆录

https://blog.csdn.net/qq_30500575/category_12620276.html?spm=1001.2014.3001.5482

相关推荐
骑着蜗牛撵大象3272 小时前
Spring AI + Qwen3.8 周报助手:从事项采集到人工确认卡的闭环实战
人工智能·spring·elasticsearch·自动化·大模型应用·qwen3.8·rag溯源
paopaokaka_luck2 小时前
民宿管理系统 (AI民宿总结、协同过滤推荐算法、WebSocket 在线咨询、ECharts 经营分析、房态与结算联动、 民宿预订业务闭环)
java·人工智能·spring boot·websocket·数据分析·echarts·推荐算法
java资料站2 小时前
十四、Spring AI Alibaba · 案例 · 基于 HumanInTheLoop 的内容审核系统
java·spring·状态模式
ydjs678899-bot2 小时前
您的Next.js中间件匹配器配置可能会跳过您认为它保护的路由
开发语言·javascript·中间件
猫咪很可爱2 小时前
Oracle归档自动删除任务失败
数据库·oracle
cccccc语言我来了2 小时前
Linux (11) 进程控制
linux·运维·数据库
Chengbei112 小时前
JsOwl|AI 赋能 JS 敏感信息扫描器,AST + 正则、source‑map 源码还原、登录态爬虫输出交互式 HTML 报告
开发语言·javascript·网络·人工智能·爬虫·网络安全·自动化
David猪大卫2 小时前
【C++修炼】string类:string类的模拟实现
c语言·开发语言·数据结构·c++·经验分享·笔记·学习
geovindu2 小时前
rust: Iterator Pattern
开发语言·后端·设计模式·rust·行为模式·迭代器模
杨运交2 小时前
[079][消息模块]基于 Redis Stream 的高可靠消息队列实现——Spring Data Redis 实战解析
数据库·redis·spring