java实现豆瓣回帖机器人
最近一直帮老板写爬虫,写累了就寻思着找点乐子,碰巧平时喜欢逛豆瓣,就打算写一个自动回帖机器人,废话不多说我们进入正题:
主要用到2个开源工具:Jsoup和httpclient
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实现豆瓣回帖机器人的更多相关文章
- java实现小九机器人接口
package com.iask.webchat.chatmachine; import java.net.URLEncoder; import org.apache.http.HttpEntity; ...
- java接入钉钉机器人(带源码)
前言 登录钉钉网页: https://im.dingtalk.com 登录说明文档地址,以备随时查询: https://ding-doc.dingtalk.com/doc#/serverapi2/qf ...
- Java实现 LeetCode 657 机器人能否返回原点(暴力大法)
657. 机器人能否返回原点 在二维平面上,有一个机器人从原点 (0, 0) 开始.给出它的移动顺序,判断这个机器人在完成移动后是否在 (0, 0) 处结束. 移动顺序由字符串表示.字符 move[i ...
- Java接入图灵机器人,实现与机器人聊天
很多人都玩过微信,其中就有与机器人聊天的功能:
- Java工程师的终极书单
本份Java工程师的终极书单只在专业的Java技术博客–天天编码上发布,没有授权任何网站与个人转载. 坚持阅读好书是学习Java技术的好方式.但是,市面上与Java技术相关的书籍可谓数不胜数,如何从这 ...
- Java开发者职业生涯要看的200+本书
作者:老刘链接:https://www.zhihu.com/question/29581524/answer/684872838来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...
- robotframework笔记22
创建测试库 支持的编程语言 机器人框架本身是用写的 Python 和自然的测试 库扩展它可以使用相同的实现 语言. 运行时框架上 Jython ,图书馆也可以 实现使用 Java . 纯Python代 ...
- robotframework笔记1
机器人框架是一个基于Python的,可扩展的关键字驱动的自动化测试最终到终端的验收测试和验收测试驱动开发(ATDD)框架.它可用于检测分布式异类应用程序,其中,验证要求感人几种技术和接口. 下面列出了 ...
- Web前端基础——HTML
一 .HTML 概述 HTML : 超文本标记语言 HyperText markup language <marquee behavior="alternate"> & ...
随机推荐
- element-ui使用el-tabs组件的时候浏览器直接卡死的问题
遇到这个问题的原由是:本身自己项目的elementUI版本是2.0.11较低了,项目有个功能是自定义progress进度条颜色,无奈高版本的才有这个配置,所以就升级了elementUI,升级到了最高版 ...
- LVS负载均衡常用的工作模式有NAT、DR、和TUN三种,其中DR模式性能最为优越,使用最为广泛。
一.安装LVS LVS的编译安装参考本站文章:http://www.linuxe.cn/post-192.html,对于LVS这种功能性软件,在生产中用yum安装也是没有问题的. 1 yum inst ...
- group by问题
在使用group by进行查询结果分组的时候,报错: 1055 - Expression #1 of SELECT list is not in GROUP BY clause and contain ...
- HashMap 的实现原理(1.7)
参考 :http://wiki.jikexueyuan.com/project/java-collection/hashmap.html https://blog.csdn.net/w22981192 ...
- centos7 php-fpm 开机启动
拷贝php-fpm脚本至/etc/init.d目录(文件在php解压目录) cp /usr/local/src/php-/sapi/fpm/init.d.php-fpm /etc/init.d/php ...
- Librepilot-Windows编译环境的搭建
1.安装Msys2 下载Msys2,下载地址 https://msys2.github.io,注意根据笔记本的型号选择32bit或64bit. 2.添加LibrePilot MinGW库 在 /e ...
- mysql个人初配置
记录下在ubuntu 18.04.3 LTS环境中安装mysql和个人初期简单设置. 1:安装myslq:sudo apt install mysql-server. 2:设置root密码.由于我没有 ...
- 2018牛客网暑期ACM多校训练营(第十场)A Rikka with Lowbit (树状数组)
链接:https://ac.nowcoder.com/acm/contest/148/A 来源:牛客网 Rikka with Lowbit 时间限制:C/C++ 5秒,其他语言10秒 空间限制:C/C ...
- 如何将vim打造成Linux下的source insight
编写者:龙诗科 邮箱:longshike2010@163.com 2016-01-06 众所周知,windows下的source insight是阅读项目代码的神器,其神奇之处在于可以根据当前鼠标所指 ...
- Java中InputStream和String之间的转换方法
1.InputStream转化为String1.1 JDK原生提供方法一:byte[] bytes = new byte[0];bytes = new byte[inputStream.availab ...