热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

模拟CSDN请求,做一点事

需求:无聊,就是玩玩。功能:指定博客地址,随机访问某一篇博文,增加该博文访问量。实现:1、通过Httpclient实现模拟访问操作。2、指定博客列表URL,通过HTM

 需求:无聊,就是玩玩。偷笑

 功能:指定博客地址,随机访问某一篇博文,增加该博文访问量。

 实现:1、通过Httpclient实现模拟访问操作。

              2、指定博客列表URL,通过HTMLParse爬虫框架分析HTML节点,获取所有博文URL,随机模拟操作。

              3、使用线程Thread Sleep设置定时访问博文URL。

              4、使用Java Service Wrapper打包成Windows服务,每天自动启动并自动运行程序(可选)。

准备工作:

需要准备以下LIB:可根据情况删剪LIB。

 详细代码:

package org.csdn.service;

import java.io.IOException;
import java.util.Random;

import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.COOKIEStore;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.params.ClientPNames;
import org.apache.http.client.protocol.ClientContext;
import org.apache.http.impl.client.BasicCOOKIEStore;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;
import org.apache.http.util.EntityUtils;
import org.htmlparser.Parser;
import org.htmlparser.filters.AndFilter;
import org.htmlparser.filters.HasAttributeFilter;
import org.htmlparser.filters.TagNameFilter;
import org.htmlparser.tags.LinkTag;
import org.htmlparser.tags.Span;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;

public class RefreshCSDN extends Thread{

private COOKIEStore COOKIEStore = new BasicCOOKIEStore();
private String blogURL = "";
// 所有博客URL数组。
private static String [] links = null;
// 博客访问次数。
private int c = 1;

public RefreshCSDN(String blogURL) throws Exception {
this.blogURL = blogURL;
this.getCSDNBlogList();
}

public void run(){
while(true){
try {
// 从博客列表中随机取出一篇博文。
String url = links[new Random().nextInt(links.length-1)];
System.out.println(url);
this.refreshCSDN(url);
// 30秒刷一次。
Thread.sleep(30*1000);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("出错,暂停10分钟再继续。");
try {
Thread.sleep(2*60*60*1000);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
continue;
}
}
}

// 模拟请求。
@SuppressWarnings("deprecation")
private HttpResponse execute(String url)
throws ClientProtocolException, IOException {
// 必须要设置头的HOST,否则CSDN返回权限403 Forhidden
BasicHttpParams headerParams = new BasicHttpParams();
headerParams.setParameter(ClientPNames.HANDLE_REDIRECTS, Boolean.TRUE);
headerParams.setParameter("Host", "blog.csdn.net");

HttpClient httpClient = new DefaultHttpClient(
new ThreadSafeClientConnManager());
HttpGet httpGet = new HttpGet(url);
httpGet.setParams(headerParams);
httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0");
HttpContext localCOntext= new BasicHttpContext();
localContext.setAttribute(ClientContext.COOKIE_STORE, COOKIEStore);
HttpResponse respOnse= httpClient.execute(httpGet, localContext);
System.out.println("Request URL:"+url);
// 返回状态。
System.out.println("[Status:" + response.getStatusLine().getStatusCode() + "]");
return response;
}

public void refreshCSDN(String url) throws Exception {
HttpResponse respOnse= execute(url);
int statusCode = response.getStatusLine().getStatusCode();
if(statusCode == 200){
System.out.println("成功Refresh:" + (c++) +"次.");
}
System.out.println(""+statusCode);
}

// 获取博文所有URL
private void getCSDNBlogList() throws Exception {
HttpResponse respOnse= execute(blogURL);
String cOntent= EntityUtils.toString(response.getEntity());
NodeList nodeList = this.getNodeByClass(content, "span", "link_title");
links = new String[nodeList.size()];
for(int i =0; i Span span = (Span)nodeList.elementAt(i);
LinkTag link = (LinkTag)span.getChildren().elementAt(0);
links[i] = "http://blog.csdn.net"+link.getAttribute("href");
}
}

// 遍历HTML节点。
private NodeList getNodeByClass(String content, String tag, String className) {
Parser parser = Parser.createParser(content, "utf-8");
AndFilter filter = new AndFilter(new TagNameFilter(tag),
new HasAttributeFilter("class", className));
try {
return parser.parse(filter);
} catch (ParserException e) {
e.printStackTrace();
return null;
}
}

public static void main(String[] args) throws Exception {
// 设置博客目录列表URL。
RefreshCSDN csdn = new RefreshCSDN(
"http://blog.csdn.net/programmer_sir?viewmode=contents");
csdn.start();
csdn.start(); // 可以开多个线程,开多了小心CSDN搞你。
 }}

以上代码,Main方法直接运行即可。

打印结果:

Request URL:http://blog.csdn.net/programmer_sir?viewmode=contents
[Status:200]
http://blog.csdn.net/programmer_sir/article/details/9009729
Request URL:http://blog.csdn.net/programmer_sir/article/details/9009729
[Status:200]
成功Refresh:1次.
200
http://blog.csdn.net/programmer_sir/article/details/9049005
Request URL:http://blog.csdn.net/programmer_sir/article/details/9049005
[Status:200]
成功Refresh:2次.
200
http://blog.csdn.net/programmer_sir/article/details/10285231
Request URL:http://blog.csdn.net/programmer_sir/article/details/10285231
[Status:200]
成功Refresh:3次.
200
http://blog.csdn.net/programmer_sir/article/details/25710825
Request URL:http://blog.csdn.net/programmer_sir/article/details/25710825
[Status:200]
成功Refresh:4次.
200
http://blog.csdn.net/programmer_sir/article/details/18351107
Request URL:http://blog.csdn.net/programmer_sir/article/details/18351107
[Status:200]
成功Refresh:5次.
200
http://blog.csdn.net/programmer_sir/article/details/23603881
Request URL:http://blog.csdn.net/programmer_sir/article/details/23603881
[Status:200]
成功Refresh:6次.
200
注意事项:

1、建议是30秒~一分钟刷一次,如果间隔时间太短,CSDN是不会增加访问量的。

2、http://blog.csdn.net/programmer_sir?viewmode=contents是我的博客列表页面,指定你的博客列表URL即可。

3、代码更新于2014年9月份10号。后续如果CSDN对IP访问限制住了,那你可以使用JAVA代理,这样的话CSDN是无法限制刷流量的,关于如何使用JAVA代理,可以参考我很早前的一篇博文。

4、如果你只写了一篇博客,CSDN的LIST标签不是SPAN好像,你要改以下方法。

getNodeByClass

5、那些只看不评论的程序员,注定是很难提升的。哈哈。。


推荐阅读
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
author-avatar
哲纸
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有