最近一直帮老板写爬虫,写累了就寻思着找点乐子,碰巧平时喜欢逛豆瓣,就打算写一个自动回帖机器人,废话不多说我们进入正题:

主要用到2个开源工具:Jsouphttpclient

Step 1:模拟登陆

public static boolean login() throws IOException{
String captcha_id=downloadPic(login_url,"D:\\yz.png");//下载验证码图片到本地
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入验证码:");
String yan = br.readLine();
HttpPost httppost = new HttpPost(login_url);
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("captcha-id", captcha_id));//用firebug自己找
params.add(new BasicNameValuePair("captcha-solution", yan));//验证码
params.add(new BasicNameValuePair("form_email", form_email));//用户名
params.add(new BasicNameValuePair("form_password", form_password));//密码
params.add(new BasicNameValuePair("redir", redir));//跳转地址,一般是自己主页
params.add(new BasicNameValuePair("source", "main"));
params.add(new BasicNameValuePair("login", "登录"));
httppost.setEntity(new UrlEncodedFormEntity(params));
CloseableHttpResponse response = httpclient.execute(httppost);//执行这个post int statuts_code=response.getStatusLine().getStatusCode();//获得服务器返回状态码 if(statuts_code!=302){
System.err.println("登录失败~");
return false;
} else{
System.err.println("登录成功~");
}
httppost.releaseConnection();
return true;
}

Step 2:利用火狐浏览器的firebug插件查看发帖时post哪些参数给服务器

一般是这4个参数:ck、rv_comment、start、submit_btn

发帖代码如下:

  public static boolean startPost(String url) {//参数url即为帖子地址

        try{
String html=getPageHtml(url);
Pattern p=Pattern.compile("呃...你想要的东西不在这儿");
Matcher m=p.matcher(html);
if(m.find()){
return false;
} Pattern p3=Pattern.compile("该话题已被小组管理员设为不允许回应");
Matcher m3=p3.matcher(html);
if(m3.find()){
return false;
} Pattern p2=Pattern.compile("请输入上图中的单词");
Matcher m2=p2.matcher(html);
if(m2.find()){
System.out.println("要输验证码了~暂停10分钟");
Thread.sleep(600000);
return false;
} HttpPost httppost = new HttpPost(url+"add_comment#last");
httppost.addHeader("Connection", "keep-alive");
List<NameValuePair> params2 = new ArrayList<NameValuePair>();
params2.add(new BasicNameValuePair("ck", "xNxg"));//这个参数很重要一定要自己用firebug查看,否则发不了贴
params2.add(new BasicNameValuePair("rv_comment","你的评论内容"));//
params2.add(new BasicNameValuePair("start", "0"));
params2.add(new BasicNameValuePair("submit_btn", "加上去"));
httppost.setEntity(new UrlEncodedFormEntity(params2,"utf-8"));
CloseableHttpResponse response = httpclient.execute(httppost);
int status_code=response.getStatusLine().getStatusCode(); if(status_code==302){
System.out.println("评论成功~ "+url);//评论成功
}
else{
System.out.println("评论失败~ "+url);//评论失败
}
httppost.releaseConnection();
Thread.sleep(1500);
}catch(Exception e){
return false;
} return true;
}

完整代码请查看我的GitHub:   https://github.com/wqpod2g/Douban

感谢这篇帖子的作者:http://www.cnblogs.com/lzzgym/p/3322685.html

java实现豆瓣回帖机器人的更多相关文章

  1. java实现小九机器人接口

    package com.iask.webchat.chatmachine; import java.net.URLEncoder; import org.apache.http.HttpEntity; ...

  2. java接入钉钉机器人(带源码)

    前言 登录钉钉网页: https://im.dingtalk.com 登录说明文档地址,以备随时查询: https://ding-doc.dingtalk.com/doc#/serverapi2/qf ...

  3. Java实现 LeetCode 657 机器人能否返回原点(暴力大法)

    657. 机器人能否返回原点 在二维平面上,有一个机器人从原点 (0, 0) 开始.给出它的移动顺序,判断这个机器人在完成移动后是否在 (0, 0) 处结束. 移动顺序由字符串表示.字符 move[i ...

  4. Java接入图灵机器人,实现与机器人聊天

    很多人都玩过微信,其中就有与机器人聊天的功能:

  5. Java工程师的终极书单

    本份Java工程师的终极书单只在专业的Java技术博客–天天编码上发布,没有授权任何网站与个人转载. 坚持阅读好书是学习Java技术的好方式.但是,市面上与Java技术相关的书籍可谓数不胜数,如何从这 ...

  6. Java开发者职业生涯要看的200+本书

    作者:老刘链接:https://www.zhihu.com/question/29581524/answer/684872838来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  7. robotframework笔记22

    创建测试库 支持的编程语言 机器人框架本身是用写的 Python 和自然的测试 库扩展它可以使用相同的实现 语言. 运行时框架上 Jython ,图书馆也可以 实现使用 Java . 纯Python代 ...

  8. robotframework笔记1

    机器人框架是一个基于Python的,可扩展的关键字驱动的自动化测试最终到终端的验收测试和验收测试驱动开发(ATDD)框架.它可用于检测分布式异类应用程序,其中,验证要求感人几种技术和接口. 下面列出了 ...

  9. Web前端基础——HTML

    一 .HTML 概述 HTML : 超文本标记语言 HyperText markup language <marquee behavior="alternate"> & ...

随机推荐

  1. H. A Cache Simulator

    Cache memories have been used widely in current microprocessor systems. In this problem, you are ask ...

  2. linux环境查看版本信息

    1.uname -a 2.cat /proc/version 3.cat /etc/issue 4.cat /proc/cpuinfo (查看cpu相关信息)

  3. 使用 supervisor 管理 Celery 服务

    使用 supervisor 管理 Celery 服务 Celery 后台运行 如果我们想让celery worker运行在后台而不是终端上,在后台以守护进程的方式运行,我们可以使用supervisor ...

  4. 初探css-18 尺寸

    CSS 尺寸 (Dimension) CSS 尺寸 (Dimension) 属性允许你控制元素的高度和宽度.同样,它允许你增加行间距. 更多实例 这个例子演示了如何设置不同元素的高度. <sty ...

  5. time、date、datetime、timestamp和year

    在此声明mysql数据库 时间上总共有五中表示方法:它们分别是 time.date.datetime.timestamp和year. time : “hh:mm:ss”格式表示的时间值,格式显示TIM ...

  6. centos--软件源--本地软件源---离线安装

    一.软件源配置文件 1./etc/yum.conf 配置文件 [main] cachedir=/var/cache/yum #yum下载的RPM包的缓存目录 keepcache= #缓存是否保存,1保 ...

  7. aria2的安装与配置

    aria2安装 安装 epel 源: yum install epel-release 然后直接安装: yum install aria2 -y 配置 Aria2 创建目录与配置文件 这一步需要切换到 ...

  8. sql 占位符及部分时间函数

    Mysql 预处理占位符 %s -- 表示字段串 %d -- 表示整形数字 %f -- 表示浮点数 (UNIX_TIMESTAMP(DATE_SUB(now(), INTERVAL jp_days D ...

  9. js实现倒计时(分:秒)

    上代码: //倒计时start 需要传入的参数为秒数,此方法倒计时结束后会自动刷新页面 function resetTime(timetamp){ var timer=null; var t=time ...

  10. SpringCloud组件架构图

    总结一下spring cloud 的结构: 1.请求统一通过API网关(Zuul)来访问内部服务. 2.网关接收到请求后,从注册中心(Eureka)获取可用服务 3.由Ribbon进行均衡负载后,分发 ...