声明:刷访问量 (:-& 是不对的!OK?明确这一点我们来从技术层面来探讨,如何实现刷 ****博客 访问量。
****博客 是具有防爬虫功能的,如果只是简单的刷新、抓取并不会增加访客数量,那么…😛
Don’t say much, just go to the code.
package org.bood.tasks;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 定时访问CSDN博客内容,增加浏览量
*
* @author bood
* @since 2024/01/05
*/
@Configuration
@EnableScheduling
public class IncreaseBlogViews {
/**
* 用户ID
*/
private static final String USER_ID = "BUG_call110";
/**
* CSDN博客文章列表前缀URL
*/
private static final String HOME_URL = "https://blog.csdn.net/" + USER_ID + "/article/list/";
@Scheduled(fixedRate = 180000)
public void run() {
try {
Set<String> urls = fetchArticleUrls();
visitUrls(urls);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 获取所有文章的URL
*
* @return {@link Set }<{@link String }>
* @author bood
* @since 2024/01/05
*/
private Set<String> fetchArticleUrls() throws IOException {
Set<String> urls = new HashSet<>();
for (int i = 1; i <= 10; i++) {
System.out.println("正在查找第 " + i + " 页");
String pageUrl = HOME_URL + i;
System.out.println(pageUrl);
String pageContent = doGet(pageUrl);
// 检查页面是否还有博文链接,如果没有则终止循环
if (pageContent.contains("空空如也")) {
System.out.println("没有更多页面!");
break;
}
// 使用正则表达式提取所有博文链接
List<String> links = getMatherSubstrs(pageContent, "https://blog.csdn.net/" + USER_ID + "/article/details/[0-9]+");
urls.addAll(links);
System.out.println("第 " + i + " 页查找成功");
}
System.out.println("总文章数为: " + urls.size());
return urls;
}
/**
* 访问提取出的URL以增加访问量
*
* @param urls URL列表
* @author bood
* @since 2024/01/05
*/
private void visitUrls(Set<String> urls) throws IOException {
System.out.println("开始访问每个链接!");
int count = 0;
for (String url : urls) {
doGet(url);
count++;
System.out.println("成功访问第 " + count + " 个链接,共 " + urls.size() + " 个: " + url);
}
System.out.println("运行完毕,成功增加访问数:" + count);
}
private static String doGet(String urlStr) throws IOException {
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestProperty("User-Agent",
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36");
try (BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"))) {
StringBuilder sb = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
sb.append(line);
}
return sb.toString();
} finally {
conn.disconnect(); // 断开连接
}
}
/**
* 使用正则表达式匹配字符串
*
* @param str 字符串
* @param regex 正则表达式
* @return {@link List }<{@link String }>
* @author bood
* @since 2024/01/05
*/
private static List<String> getMatherSubstrs(String str, String regex) {
List<String> list = new ArrayList<>();
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
list.add(matcher.group());
}
return list;
}
}