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

目录

我们发现csdn的文章

首先为了印证我们的想法

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

发送请求

​编辑获得响应结果

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

PostRequestSender类

但是我们经过测试发现

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

然后延迟启动

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

主方法代码

博客的阅览量也在增长

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

我们可以采取其他策略

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

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

个人号推广

博客主页

Web后端开发

Web前端开发

数据库开发

项目实战

算法与数据结构

计算机基础

回忆录


我们发现csdn的文章

只要你点进去

就会增长阅读量

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

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

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

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

首先为了印证我们的想法

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

打开postman

发送请求

获得响应结果

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

证实了我们的想法

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

利用网络编程的知识

我们写个发起请求的类

PostRequestSender类

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放进去

然后延迟启动

利用的是多线程的知识

创建线程池

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

我们遍历数组

主方法代码

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/747807.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

redis哨兵模式(Redis Sentinel)

哨兵模式的背景 当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用。这不是一种推荐的方式。 为了解决单点故障和提高系统的可用性,需要一种自动化的监…

司美格鲁肽在中国获批!深度解析报告附上

在中国,肥胖问题日益严重,但有效的治疗方法却相对匮乏。然而,这一现状随着国家药品监督管理局(NMPA)对诺和诺德公司研发的司美格鲁肽注射液(商品名:诺和盈)的批准而得到改变。6月25日…

JavaEE之HTTP协议(1)_HTTP基础知识,HTTP 请求、响应格式,方法,状态码

一、HTTP协议 1.1 基本概念: HTTP全称超文本传输协议,是一种无状态的、应用层的协议,它基于请求/响应模型。客户端(通常是Web浏览器)通过发送HTTP请求到服务器来获取或发送信息,服务器则返回HTTP响应作为回应。HTTP协…

【设计模式】行为型-策略模式

策略模式,如春风吹过,随心所欲,变幻无穷,每一丝风都是一种选择。 文章目录 一、订单处理二、策略模式三、策略模式的核心组成四、运用策略模式五、策略模式的应用场景六、小结推荐阅读 一、订单处理 场景假设:有一个…

使用CDN方式创建Vue3.0应用程序

CDN 的全称是 content delivery network,即内容分发网络。它是构建在现在的互联网基础之上的一层智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发和调度等功能模块,使用户就近获取所需内容&#xff0c…

2023 年度国家科学技术奖励公布

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…

引用别的组件

在脚本中,也可以引用别的物体下的组件。 第一种办法, (1)添加一个变量, public GameObject bgmNode ; 然后在检查器里指定这个引用。 例如:在背景音乐空物体下面有个Audio Source组件 游戏主控脚本代码…

Python | Leetcode Python题解之第200题岛屿数量

题目&#xff1a; 题解&#xff1a; class Solution:def dfs(self, grid, r, c):grid[r][c] 0nr, nc len(grid), len(grid[0])for x, y in [(r - 1, c), (r 1, c), (r, c - 1), (r, c 1)]:if 0 < x < nr and 0 < y < nc and grid[x][y] "1":self.d…

网约车停运损失费:2、协商过程

目录 &#x1f345;点击这里查看所有博文 随着自己工作的进行&#xff0c;接触到的技术栈也越来越多。给我一个很直观的感受就是&#xff0c;某一项技术/经验在刚开始接触的时候都记得很清楚。往往过了几个月都会忘记的差不多了&#xff0c;只有经常会用到的东西才有可能真正记…

Jackson和fastjson解决序列化时字段属性大小写改变的问题

在部分特殊场景下&#xff0c;我们可能会把实体的字段属性改成全部大写&#xff0c;但是在返回前端时&#xff0c;字段会被序列化成小写。 比如我们有一个这个类属性都是大写&#xff1a; 后端接口是这样的 然后我们请求后&#xff0c;会发现我们的字段被变成全部小写的。 …

windows USB 设备驱动开发-总章

通用串行总线 (USB) 提供可扩展的即插即用串行接口&#xff0c;确保外围设备的标准、低成本的连接。 USB 设备包括键盘、鼠标、游戏杆、打印机、扫描仪、存储设备、调制解调器、视频会议摄像头等。USB-IF 是一个特别兴趣组 (SIG)&#xff0c;负责维护官方 USB 规范、测试规范和…

vs code + Keil Assistant 配置 Keil 单片机开发

1、 先安装vscode完成后 安装插件 2 安装C/C 与 keil Assistant 需说明一下 Assistant 1.7.0版本有bug F7按不了 所以安装1.6.2版本 以下是我的安装插件 EMBEDDED IDE 可安装 可不安装 随便你 3 配置 Assistant 4、设置C/C 目录 ${workspaceFolder}/**D:/Keil_v5/C51/INC/**…

构建 Audio Unit 应用程序

构建 Audio Unit 应用程序 构建 Audio Unit 应用程序从选择设计模式开始I/O Pass ThroughI/O Without a Render Callback FunctionI/O with a Render Callback FunctionOutput-Only with a Render Callback Function其他设计模式 构建应用程序配置 audio session指定 audio uni…

Linux系统安装和卸载nginx

&#x1f4d6;Linux系统安装和卸载nginx ✅下载✅安装✅启动nginx✅安装成系统服务✅常见问题&#xff1a;80端口被占用了✅卸载✅目录结构 以下介绍的是以源码编译安装方式&#xff1a; ✅下载 官方地址&#xff1a;https://nginx.org/en/download.html 123云盘地址&#x…

MySQL表解锁

查看锁信息 show full processlist 如果一个表被锁定了&#xff0c;会有一个 “Waiting for table metadata lock” 的提示&#xff0c;表明该表正在等待锁定。 解锁表 删除state上有值的事务 kill query 事务id 表解锁完成

2024南京国际自有品牌产品博览会

展会名称&#xff1a;2024南京国际自有品牌产品博览会 展会时间&#xff1a;2024年10月11-13日 展会地点&#xff1a;南京国际博览中心 展览规模&#xff1a;36000平米 详询主办方陆先生 I38&#xff08;前三位&#xff09; I82I&#xff08;中间四位&#xff09; 9I72&…

[XYCTF新生赛2024]-PWN:ptmalloc2 it‘s myheap plus解析(glibc2.35,堆中的栈迁移,orw)

查看保护 查看ida 思路&#xff1a; 泄露libc和堆地址就不多说了&#xff0c;fastbin duf也不解释了。这里主要是利用fastbin duf在environ附近创建堆块&#xff0c;泄露environ中的栈地址&#xff0c;然后就利用fastbin duf修改rbp和返回地址进行栈迁移了&#xff0c;迁移目标…

Apache APISIX遇到504超时的解决办法

说明&#xff1a; Apache APISIX版本&#xff1a;v3.9.0Apache APISIX Dashboard版本&#xff1a;v3.0.1 当使用Apache APISIX开源网关&#xff0c;通过接口上传或下载大文件等时&#xff0c;出现如下“504 Gateway Time-out”错误信息&#xff0c;它表示网关或代理服务器未能…

Spring Cloud - nacos +ubuntu环境搭建

1、安装ubuntu虚拟环境 VMware虚拟机安装Ubuntu与配置Ubuntu&#xff08;超详细教程&#xff09; 2、docker环境安装 1、apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common 2、curl -fsSL https://mirrors.ustc.edu.cn/docke…

【JavaScript】BOM编程

目录 一、BOM编程是什么 二、window对象的常用方法 1、弹窗API方法 2、计时器任务方法 三、window对象的属性对象常用方法 1、history网页浏览历史 2、location地址栏 3、数据存储属性对象 4、console控制台 一、BOM编程是什么 当我们使用浏览器打开一个网页窗口时&#xff0c;…