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

主要用到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. ELK的搭建以及使用

    一.架构如图: 二.工作机制: 在需要收集日志的应用上安装filebeat(需要修改配置文件,配置文件稍后介绍),启动filebeat后,会收集该应用的日志推送给redis,然后logstash从re ...

  2. Python 从大型csv文件中提取感兴趣的行

    帮妹子处理一个2.xG 大小的 csv文件,文件太大,不宜一次性读入内存,可以使用open迭代器. with open(filename,'r') as file # 按行读取 for line in ...

  3. jmeter强大的扩展插件!!

    jmeter4.0以上版本,如jmeter5.1.1版本的集成插件,只需要在官网下下载“plugins-manager.jar”包,放在jmeter安装路径的lib/ext目录下即可使用. (但该ja ...

  4. [转载]C / C++ 计算程序运行的时间

    原文链接:https://blog.csdn.net/qq_36667170/article/details/79507547 在学数据结构过程中老师让查看不同算法的运行时间,然后让自己打印运行时间. ...

  5. storm复习笔记

    1.storm基本介绍 0.storm是免费.开源.分布式.跨语言.可伸缩.低延迟.容错实时流计算系统.每个节点每秒处理百万元组 1.流计算,动态数据.mr操作的数据都是静态数据,启动mr读取文件,o ...

  6. Hack the box: Bastion

    介绍 目标:10.10.10.134 (Windows) Kali:10.10.16.65 In conclusion, Bastion is not a medium box. But it wou ...

  7. python全栈开发教程目录

    python入门到进阶 Python基础2——数据类型的操作 Python基础——函数入门 Python基础——函数进阶 Python基础——函数的装饰器 Python基础——函数的装饰器 Pytho ...

  8. [Linux]Linux下经常会用到的简单实例(持续更新)

    1.查找某些进程并结束他们: ps -elf | grep '进程关键字' | awk '{print $4}'| xargs kill -9 解析: ps -elf 的 -e 代表列出所有进程,-l ...

  9. python实现建造者模式

    python实现建造者模式 前言 无论是在现实世界中还是在软件系统中,都存在一些复杂的对象,它们拥有多个组成部分,如汽车,它包括车轮.方向盘.发送机等各种部件.而对于大多数用户而言,无须知道这些部件的 ...

  10. 2019-11-29-win10-uwp-轻量级-MVVM-框架入门-2.1.5.3199

    title author date CreateTime categories win10 uwp 轻量级 MVVM 框架入门 2.1.5.3199 lindexi 2019-11-29 10:16: ...