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"> & ...
随机推荐
- Python Set intersection() 方法
描述 intersection() 方法用于返回两个或更多集合中都包含的元素,即交集. 语法 intersection() 方法语法: set.intersection(set1, set2 ... ...
- 关于encodeURI() 踩的坑
情景: 列表页跳转详情页,需要把列表页的数据带到详情页直接展示,思路是在路径后面加?传参,然后再在详情页获取url的参数. 为了以防中文乱码什么的所以先试用encodeURI转码再decodeURI解 ...
- Android 之 悬浮窗口
1. 创建并设置 WindowManager 类 WindowManager mWindowManager; // 取得系统窗体 mWindowManager = (WindowManager) ...
- elementui 之el-pagination爬坑,属性pager-count的设定
我想设置总页数为10页,页码条总是显示两个页码,其余省略号显示,我选择了pager-count,如下: <el-pagination @size-change="handleSizeC ...
- 【总结】Android 应用测试总结
前提 所有的功能分支已完成 启动: 1. 启动入口:桌面正常启动,最近运行启动,所有程序列表中启动,锁屏快捷启动2. 其他入口:从其他程序开启应用,从外部以文件形式打开应用(如果有)3. 退回:从其他 ...
- Maven项目构建利器01——为什么要使用Maven
1.为什么要使用Maven a)一个项目就是一个工程 如果一个项目非常庞大,不适合用package(包)来划分模块, 最好是每一个模块对应一个工程 分工合作,借助于Maven就可以将一个项目拆分成多个 ...
- Codeforces Round #575 (Div. 3) C. Robot Breakout (模拟,实现)
C. Robot Breakout time limit per test3 seconds memory limit per test256 megabytes inputstandard inpu ...
- WebDriver+PhantomJs爬虫运用(Java)
需要的添加的jar包及工具:我这里使用maven来构建项目,添加依赖如下: <dependency> <groupId>org.seleniumhq.selenium</ ...
- ArrayList与LinkedList的区别
两者区别大致分为以下几点: 1.ArrayList采用的是采用的是数组形式保存数据,这种方式将对象放在连续的位置中(线性存储):LinkedList采用的将对象放在独立的空间中,每个空间还保留下一个节 ...
- ztree多种数据包装以及相关设置
首先来一个完整的ztree代码 html代码 <form id="addTreeDataFrm" method="post" class="fo ...