python版 百度签到
经常玩贴吧,刚学python ,所以自己弄了一个python版的签到程序。自己的东西总是最好的。
登陆模块参考的http://www.crifan.com/emulate_login_website_using_python/。签到模块自己找百度瞎糊弄的,写的很烂,代码一点都不规范。有什么建议可以提
- # 594595116@qq.com
- import re
- import urllib
- import urllib2
- import cookielib
- import json
- import sys
- import time
- from urllib import quote,unquote
- from urllib2 import HTTPError
- from urllib2 import URLError
- def t():
- print "按(Y/y)继续,其他退出!"
- t = raw_input(">>")
- if (t=="y" or t=="Y"):
- Login()
- else :
- print "感谢您的使用。"
- print "email:594595116@qq.com"
- time.sleep(5)
- #登陆模块
- def Login():
- ID = raw_input("百度账号(暂不支持手机和邮箱登陆) :")
- ID1 = ID.decode("gb18030").encode("utf-8") #--注意编码,可能网站会识别不了而导致登陆失败
- PassWord = raw_input("密码 :")
- try :
- cj = cookielib.CookieJar();
- opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj));
- urllib2.install_opener(opener);
- #打开百度获得 cookie
- baidu_URL = "http://www.baidu.com"
- staticpage = "http://www.baidu.com/cache/user/html/jump.html";
- baidu_Login_URL = "https://passport.baidu.com/v2/api/?login";
- baidu_OPEN = urllib2.urlopen(baidu_URL)
- #获得所需的数据 token
- getapiUrl = "https://passport.baidu.com/v2/api/?getapi&class=login&tpl=mn&tangram=true";
- getapiResp = urllib2.urlopen(getapiUrl);
- getapiRespHtml = getapiResp.read();
- foundTokenVal = re.search("bdPass\.api\.params\.login_token='(?P<tokenVal>\w+)';", getapiRespHtml);
- tokenVal = foundTokenVal.group("tokenVal");
- #生成要发送的数据
- if(foundTokenVal):
- LoginData = {
- 'staticpage':staticpage,#'http://www.baidu.com/cache/user/html/v3Jump.html',
- 'charset':'UTF-8',
- 'token':tokenVal,
- 'tpl':'mn',
- #'apiver':'v3',
- #'tt':'1375838455898',
- #'codestring':'',
- 'isPhone':'false',
- #'safeflg':'0',
- #'u':'http://www.baidu.com/',
- #'quick_user':'0',
- 'username':ID1,
- 'password':PassWord,
- #'verifycode':'',
- 'mem_pass':'on',
- #'ppui_logintime':'11211',
- 'callback':'parent.bdPass.api.login._postCallback',
- };
- #把发送数据转换格式
- LoginData = urllib.urlencode(LoginData);
- #生成请求数据
- baidu_Login_Request = urllib2.Request(baidu_Login_URL, LoginData);
- #添加数据头部
- baidu_Login_Request.add_header('Content-Type', "application/x-www-form-urlencoded");
- baidu_Login_Request.add_header('User-Agent', "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31");
- #发送请求,尝试登陆
- baidu_Login_Open = urllib2.urlopen(baidu_Login_Request);
- #验证登陆是否成功
- #tt = urllib2.urlopen(baidu_URL).read().encode("gb18030")
- #print tt
- #ttt = re.search(r'href="/p/([0-9A-Za-z%]*)\?from=super"',tt).grop(1)
- #print ttt
- yanzheng_url = "http://www.baidu.com/p/" + ID1
- yanzheng_open = urllib2.urlopen(yanzheng_url)
- yanzheng_open = yanzheng_open.read().encode("gb18030")
- yanzheng = re.search(r"'sexTitle' : '([^ ]*)'", yanzheng_open).group(1)
- if(yanzheng == "我"):
- print "%s 成功登陆, ^_^" %ID
- print "签到正在进行中。。"
- Sign(ID)
- else:
- print "%s 登陆失败! 请稍后尝试! " %ID
- Login()
- else:
- print "%s 登陆失败! 请稍后尝试! " %ID
- Login()
- # print "Fail to extract token value from html=",getapiRespHtml;
- except :
- print "登陆出错啦!"
- t()
- #签到模块
- def Sign(ID):
- try :
- #签到请求地址
- Sign_Request_Url = "http://tieba.baidu.com/sign/add"
- #用户的贴吧
- ID_Tieba_Url = "http://www.baidu.com/p/" + ID + "?from=tieba"
- ID_Tieba_Open = urllib2.urlopen(ID_Tieba_Url).read()
- #i贴吧id
- itieba_id = re.search(r'i\\/([0-9]*)\\/others\?from=princess', ID_Tieba_Open).group(1)
- index = "http://tieba.baidu.com/i/" + itieba_id + "?fr=index"
- #匹配贴吧
- index_open = urllib2.urlopen(index).read()
- Tieba = re.findall(r'kw=([0-9A-Za-z%]*)&fr=itb_favo&fp=favo" target="_blank">([^ ]*)</a>', index_open)
- if Tieba != []:
- for i in range(len(Tieba)):
- Tieba_Url = "http://tieba.baidu.com/f?kw=" + Tieba[i][0]
- Tieba_Open = urllib2.urlopen(Tieba_Url).read()
- #获取tbs
- Get_Tbs = re.search(r'PageData.tbs = "([0-9a-z]*)";',Tieba_Open).group(1)
- #贴吧名字编码
- Tieba_Name = urllib.unquote(Tieba[i][0]).decode("gb18030").encode("utf-8")
- kw = Tieba_Name
- #签构造到请求数据 和 编码
- Sign_Request_Data={'ie':'utf-8','kw':kw,'tbs':Get_Tbs}
- Sign_Request_Data = urllib.urlencode(Sign_Request_Data)
- #发送签到请求
- Sign_Request = urllib2.Request(Sign_Request_Url, Sign_Request_Data)
- Sign_Request.add_header('User-agent', "Mozilla/5.0 (X11; Linux i686)")
- Sign = urllib2.urlopen(Sign_Request)
- #获取响应数据
- Response = Sign.read()
- #把响应转成字典
- Response = json.loads(Response)
- #print Response
- Tieba_Name = urllib.unquote(Tieba[i][0]).decode("gb18030").encode("utf-8")
- #print Tieba_Name
- #print unquote(Tieba[i][0])
- #print Tieba[i][0]
- if(Response['error']=="") :
- user_sign_rank = int(Response['data']['uinfo']['user_sign_rank']) #第几个签到
- cont_sign_num = int(Response['data']['uinfo']['cont_sign_num']) #连续签到
- cout_total_sing_num = Response['data']['uinfo']['cout_total_sing_num'] #累计签到
- print "%d..%s 签到成功,第%d个签到,连续签到%d天,累计签到%d天" %(i, unquote(Tieba[i][0]), user_sign_rank, cont_sign_num, cout_total_sing_num)
- else :
- print "%d.%s" %(i,unquote(Tieba[i][0])) # print "%d.%s %s" %(i,unquote(Tieba[i][0]),Response['error']) 不知道为什么这样是不行的,总是乱码。
- print "--------------------%s" %Response['error'] # print "%d.%s %s" %(i,Tieba_Name,Response['error']) 这样却可以,所以把他们拆分了
- time.sleep(3)
- else :
- print "你还没有喜欢的贴吧!"
- print "一共有%d个喜欢的吧" %(i+1)
- t()
- except :
- print "签到出错啦! "
- t()
- if __name__ == "__main__" :
- Login()
经验总结:1,编码问题需要注重 2,编码要规范
python版 百度签到的更多相关文章
- Python 版百度站长平台链接主动推送脚本
如果自己的网站需要被百度收录,可以在搜索结果中找到,就需要将网站的链接提交给百度.依靠百度的爬虫可能无法检索到网站所有的内容,因此可以主动将链接提交给百度. 在百度的站长平台上介绍了链接提交方法,目前 ...
- 火星坐标、百度坐标、WGS84坐标转换代码(JS、python版)
火星坐标.百度坐标.WGS84坐标转换代码(JS.python版) 一.JS版本源码 github:https://github.com/wandergis/coordTransform /** * ...
- 像计算机科学家一样思考Python(第2版)|百度网盘免费下载|Python新手入门资料
像计算机科学家一样思考Python(第2版)|百度网盘免费下载 提取码:01ou 内容简介 · · · · · · 本书以培养读者以计算机科学家一样的思维方式来理解Python语言编程.贯穿全书的主 ...
- 《Python金融大数据分析》高清PDF版|百度网盘免费下载|Python数据分析
<Python金融大数据分析>高清PDF版|百度网盘免费下载|Python数据分析 提取码:mfku 内容简介 唯一一本详细讲解使用Python分析处理金融大数据的专业图书:金融应用开发领 ...
- 《Python Web开发学习实录》高清PDF版|百度网盘免费下载|Python Web开发学习实录
<Python Web开发学习实录>高清PDF版|百度网盘免费下载|Python Web开发学习实录 提取码:9w3o 内容简介 Python是目前流行的动态脚本语言之一. 李勇,本书共1 ...
- 大喜python版opencv3发布,demo脚本抢鲜版发布
大喜,python版opencv3发布 zwPython3的升级也可以启动了,一直在等这个,zwPython会直接升级到版本3:zwPython3 zwPython3采用64位python3,支持op ...
- 移动端自动化测试appium 从入门到项目实战Python版✍✍✍
移动端自动化测试appium 从入门到项目实战Python版 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程 ...
- 移动端自动化测试Appium 从入门到项目实战Python版
移动端自动化测试Appium 从入门到项目实战Python版 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课 ...
- python利用百度云接口实现车牌识别
一个小需求---实现车牌识别. 目前有两个想法 调云在线的接口或者使用SDK做开发(配置环境和编译第三方库很麻烦,当然使用python可以避免这些问题) 自己实现车牌识别算法(复杂) ! 一开始准备使 ...
随机推荐
- HDU-2050 折线分割平面 找规律&递推
题目链接:https://cn.vjudge.net/problem/HDU-2050 题意 算了吧,中文题不解释了 我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线 ...
- caioj 1086 动态规划入门(非常规DP10:进攻策略)
一开始看到题目感觉很难 然后看到题解感觉这题贼简单,我好像想复杂了 就算出每一行最少的资源(完全背包+二分)然后就枚举就好了. #include<cstdio> #include<a ...
- ZooKeeper 配置注意事项 zoo.cfg
一 平台 二 软件环境 1) JDK 1.6 以上 (最好1.7 Hadoop 某一项安装时候需要 1.7) 2) 至少 3 个节点 (2m +1 ...
- 石子合并 (区间DP)
一.试题在一个园形操场的四周摆放N堆石子(N≤100),现要将石子有次序地合并成一堆.规定每次仅仅能选相邻的两堆合并成新的一堆,并将新的一堆的石子数.记为该次合并的得分.编一程序.由文件读入堆数N及每 ...
- [Recompose] Create Stream Behaviors to Push Props in React Components with mapPropsStream
Rather than using Components to push streams into other Components, mapPropsStream allows you to cre ...
- atitit. java queue 队列体系and自己定义基于数据库的队列总结o7t
atitit. java queue 队列体系and自己定义基于数据库的队列总结o7t 1. 堵塞队列和非堵塞队列 1 2. java.util.Queue接口. 1 3. ConcurrentLin ...
- Hadoop2.2集群安装配置-Spark集群安装部署
配置安装Hadoop2.2.0 部署spark 1.0的流程 一.环境描写叙述 本实验在一台Windows7-64下安装Vmware.在Vmware里安装两虚拟机分别例如以下 主机名spark1(19 ...
- 20. idea刷新项目、清除项目缓存
转自:https://www.cnblogs.com/suiyisuixing/p/7723458.html 点击File -> Invalidate caches ,点击之后在弹出框中点击确认 ...
- Android 数据库框架总结,总有一个适合你!
一:OrmLite 简述: 优点: 1.轻量级:2.使用简单,易上手:3.封装完善:4.文档全面.缺点:1.基于反射,效率较低(本人还没有觉得效率低):2.缺少中文翻译文档 jar包 地址:http: ...
- n阶幻方问题
转载自:http://blog.csdn.net/fengchaokobe/article/details/7437767 目录 第一节 n阶幻方问题 第二节 由n阶幻方引发 ...