经常玩贴吧,刚学python ,所以自己弄了一个python版的签到程序。自己的东西总是最好的。

登陆模块参考的http://www.crifan.com/emulate_login_website_using_python/。签到模块自己找百度瞎糊弄的,写的很烂,代码一点都不规范。有什么建议可以提

  1. # 594595116@qq.com
  2.  
  3. import re
  4. import urllib
  5. import urllib2
  6. import cookielib
  7. import json
  8. import sys
  9. import time
  10. from urllib import quote,unquote
  11. from urllib2 import HTTPError
  12. from urllib2 import URLError
  13.  
  14. def t():
  15. print "按(Y/y)继续,其他退出!"
  16. t = raw_input(">>")
  17. if (t=="y" or t=="Y"):
  18. Login()
  19. else :
  20. print "感谢您的使用。"
  21. print "email:594595116@qq.com"
  22. time.sleep(5)
  23.  
  24. #登陆模块
  25. def Login():
  26.  
  27. ID = raw_input("百度账号(暂不支持手机和邮箱登陆) :")
  28. ID1 = ID.decode("gb18030").encode("utf-8") #--注意编码,可能网站会识别不了而导致登陆失败
  29. PassWord = raw_input("密码 :")
  30.  
  31. try :
  32. cj = cookielib.CookieJar();
  33. opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj));
  34. urllib2.install_opener(opener);
  35.  
  36. #打开百度获得 cookie
  37. baidu_URL = "http://www.baidu.com"
  38. staticpage = "http://www.baidu.com/cache/user/html/jump.html";
  39. baidu_Login_URL = "https://passport.baidu.com/v2/api/?login";
  40. baidu_OPEN = urllib2.urlopen(baidu_URL)
  41.  
  42. #获得所需的数据 token
  43. getapiUrl = "https://passport.baidu.com/v2/api/?getapi&class=login&tpl=mn&tangram=true";
  44. getapiResp = urllib2.urlopen(getapiUrl);
  45. getapiRespHtml = getapiResp.read();
  46.  
  47. foundTokenVal = re.search("bdPass\.api\.params\.login_token='(?P<tokenVal>\w+)';", getapiRespHtml);
  48. tokenVal = foundTokenVal.group("tokenVal");
  49.  
  50. #生成要发送的数据
  51. if(foundTokenVal):
  52. LoginData = {
  53. 'staticpage':staticpage,#'http://www.baidu.com/cache/user/html/v3Jump.html',
  54. 'charset':'UTF-8',
  55. 'token':tokenVal,
  56. 'tpl':'mn',
  57. #'apiver':'v3',
  58. #'tt':'1375838455898',
  59. #'codestring':'',
  60. 'isPhone':'false',
  61. #'safeflg':'0',
  62. #'u':'http://www.baidu.com/',
  63. #'quick_user':'0',
  64. 'username':ID1,
  65. 'password':PassWord,
  66. #'verifycode':'',
  67. 'mem_pass':'on',
  68. #'ppui_logintime':'11211',
  69. 'callback':'parent.bdPass.api.login._postCallback',
  70. };
  71.  
  72. #把发送数据转换格式
  73. LoginData = urllib.urlencode(LoginData);
  74.  
  75. #生成请求数据
  76. baidu_Login_Request = urllib2.Request(baidu_Login_URL, LoginData);
  77.  
  78. #添加数据头部
  79. baidu_Login_Request.add_header('Content-Type', "application/x-www-form-urlencoded");
  80. 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");
  81.  
  82. #发送请求,尝试登陆
  83. baidu_Login_Open = urllib2.urlopen(baidu_Login_Request);
  84.  
  85. #验证登陆是否成功
  86. #tt = urllib2.urlopen(baidu_URL).read().encode("gb18030")
  87. #print tt
  88. #ttt = re.search(r'href="/p/([0-9A-Za-z%]*)\?from=super"',tt).grop(1)
  89. #print ttt
  90. yanzheng_url = "http://www.baidu.com/p/" + ID1
  91. yanzheng_open = urllib2.urlopen(yanzheng_url)
  92. yanzheng_open = yanzheng_open.read().encode("gb18030")
  93. yanzheng = re.search(r"'sexTitle' : '([^ ]*)'", yanzheng_open).group(1)
  94.  
  95. if(yanzheng == "我"):
  96. print "%s 成功登陆, ^_^" %ID
  97. print "签到正在进行中。。"
  98. Sign(ID)
  99. else:
  100. print "%s 登陆失败! 请稍后尝试! " %ID
  101. Login()
  102. else:
  103. print "%s 登陆失败! 请稍后尝试! " %ID
  104. Login()
  105. # print "Fail to extract token value from html=",getapiRespHtml;
  106.  
  107. except :
  108. print "登陆出错啦!"
  109. t()
  110.  
  111. #签到模块
  112. def Sign(ID):
  113.  
  114. try :
  115. #签到请求地址
  116. Sign_Request_Url = "http://tieba.baidu.com/sign/add"
  117.  
  118. #用户的贴吧
  119. ID_Tieba_Url = "http://www.baidu.com/p/" + ID + "?from=tieba"
  120. ID_Tieba_Open = urllib2.urlopen(ID_Tieba_Url).read()
  121.  
  122. #i贴吧id
  123. itieba_id = re.search(r'i\\/([0-9]*)\\/others\?from=princess', ID_Tieba_Open).group(1)
  124. index = "http://tieba.baidu.com/i/" + itieba_id + "?fr=index"
  125.  
  126. #匹配贴吧
  127. index_open = urllib2.urlopen(index).read()
  128. Tieba = re.findall(r'kw=([0-9A-Za-z%]*)&fr=itb_favo&fp=favo" target="_blank">([^ ]*)</a>', index_open)
  129.  
  130. if Tieba != []:
  131. for i in range(len(Tieba)):
  132. Tieba_Url = "http://tieba.baidu.com/f?kw=" + Tieba[i][0]
  133. Tieba_Open = urllib2.urlopen(Tieba_Url).read()
  134.  
  135. #获取tbs
  136. Get_Tbs = re.search(r'PageData.tbs = "([0-9a-z]*)";',Tieba_Open).group(1)
  137.  
  138. #贴吧名字编码
  139. Tieba_Name = urllib.unquote(Tieba[i][0]).decode("gb18030").encode("utf-8")
  140. kw = Tieba_Name
  141.  
  142. #签构造到请求数据 和 编码
  143. Sign_Request_Data={'ie':'utf-8','kw':kw,'tbs':Get_Tbs}
  144. Sign_Request_Data = urllib.urlencode(Sign_Request_Data)
  145.  
  146. #发送签到请求
  147. Sign_Request = urllib2.Request(Sign_Request_Url, Sign_Request_Data)
  148. Sign_Request.add_header('User-agent', "Mozilla/5.0 (X11; Linux i686)")
  149. Sign = urllib2.urlopen(Sign_Request)
  150.  
  151. #获取响应数据
  152. Response = Sign.read()
  153.  
  154. #把响应转成字典
  155. Response = json.loads(Response)
  156. #print Response
  157.  
  158. Tieba_Name = urllib.unquote(Tieba[i][0]).decode("gb18030").encode("utf-8")
  159. #print Tieba_Name
  160. #print unquote(Tieba[i][0])
  161. #print Tieba[i][0]
  162. if(Response['error']=="") :
  163. user_sign_rank = int(Response['data']['uinfo']['user_sign_rank']) #第几个签到
  164. cont_sign_num = int(Response['data']['uinfo']['cont_sign_num']) #连续签到
  165. cout_total_sing_num = Response['data']['uinfo']['cout_total_sing_num'] #累计签到
  166. print "%d..%s 签到成功,第%d个签到,连续签到%d天,累计签到%d天" %(i, unquote(Tieba[i][0]), user_sign_rank, cont_sign_num, cout_total_sing_num)
  167. else :
  168. print "%d.%s" %(i,unquote(Tieba[i][0])) # print "%d.%s %s" %(i,unquote(Tieba[i][0]),Response['error']) 不知道为什么这样是不行的,总是乱码。
  169. print "--------------------%s" %Response['error'] # print "%d.%s %s" %(i,Tieba_Name,Response['error']) 这样却可以,所以把他们拆分了
  170. time.sleep(3)
  171. else :
  172. print "你还没有喜欢的贴吧!"
  173.  
  174. print "一共有%d个喜欢的吧" %(i+1)
  175. t()
  176. except :
  177. print "签到出错啦! "
  178. t()
  179.  
  180. if __name__ == "__main__" :
  181. Login()

经验总结:1,编码问题需要注重 2,编码要规范

python版 百度签到的更多相关文章

  1. Python 版百度站长平台链接主动推送脚本

    如果自己的网站需要被百度收录,可以在搜索结果中找到,就需要将网站的链接提交给百度.依靠百度的爬虫可能无法检索到网站所有的内容,因此可以主动将链接提交给百度. 在百度的站长平台上介绍了链接提交方法,目前 ...

  2. 火星坐标、百度坐标、WGS84坐标转换代码(JS、python版)

    火星坐标.百度坐标.WGS84坐标转换代码(JS.python版) 一.JS版本源码 github:https://github.com/wandergis/coordTransform /** * ...

  3. 像计算机科学家一样思考Python(第2版)|百度网盘免费下载|Python新手入门资料

    像计算机科学家一样思考Python(第2版)|百度网盘免费下载 提取码:01ou 内容简介  · · · · · · 本书以培养读者以计算机科学家一样的思维方式来理解Python语言编程.贯穿全书的主 ...

  4. 《Python金融大数据分析》高清PDF版|百度网盘免费下载|Python数据分析

    <Python金融大数据分析>高清PDF版|百度网盘免费下载|Python数据分析 提取码:mfku 内容简介 唯一一本详细讲解使用Python分析处理金融大数据的专业图书:金融应用开发领 ...

  5. 《Python Web开发学习实录》高清PDF版|百度网盘免费下载|Python Web开发学习实录

    <Python Web开发学习实录>高清PDF版|百度网盘免费下载|Python Web开发学习实录 提取码:9w3o 内容简介 Python是目前流行的动态脚本语言之一. 李勇,本书共1 ...

  6. 大喜python版opencv3发布,demo脚本抢鲜版发布

    大喜,python版opencv3发布 zwPython3的升级也可以启动了,一直在等这个,zwPython会直接升级到版本3:zwPython3 zwPython3采用64位python3,支持op ...

  7. 移动端自动化测试appium 从入门到项目实战Python版✍✍✍

    移动端自动化测试appium 从入门到项目实战Python版 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程 ...

  8. 移动端自动化测试Appium 从入门到项目实战Python版

    移动端自动化测试Appium 从入门到项目实战Python版  整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课 ...

  9. python利用百度云接口实现车牌识别

    一个小需求---实现车牌识别. 目前有两个想法 调云在线的接口或者使用SDK做开发(配置环境和编译第三方库很麻烦,当然使用python可以避免这些问题) 自己实现车牌识别算法(复杂) ! 一开始准备使 ...

随机推荐

  1. HDU-2050 折线分割平面 找规律&递推

    题目链接:https://cn.vjudge.net/problem/HDU-2050 题意 算了吧,中文题不解释了 我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线 ...

  2. caioj 1086 动态规划入门(非常规DP10:进攻策略)

    一开始看到题目感觉很难 然后看到题解感觉这题贼简单,我好像想复杂了 就算出每一行最少的资源(完全背包+二分)然后就枚举就好了. #include<cstdio> #include<a ...

  3. ZooKeeper 配置注意事项 zoo.cfg

    一    平台 二    软件环境         1)  JDK 1.6 以上 (最好1.7 Hadoop 某一项安装时候需要 1.7)         2)  至少 3 个节点    (2m +1 ...

  4. 石子合并 (区间DP)

    一.试题在一个园形操场的四周摆放N堆石子(N≤100),现要将石子有次序地合并成一堆.规定每次仅仅能选相邻的两堆合并成新的一堆,并将新的一堆的石子数.记为该次合并的得分.编一程序.由文件读入堆数N及每 ...

  5. [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 ...

  6. atitit. java queue 队列体系and自己定义基于数据库的队列总结o7t

    atitit. java queue 队列体系and自己定义基于数据库的队列总结o7t 1. 堵塞队列和非堵塞队列 1 2. java.util.Queue接口. 1 3. ConcurrentLin ...

  7. Hadoop2.2集群安装配置-Spark集群安装部署

    配置安装Hadoop2.2.0 部署spark 1.0的流程 一.环境描写叙述 本实验在一台Windows7-64下安装Vmware.在Vmware里安装两虚拟机分别例如以下 主机名spark1(19 ...

  8. 20. idea刷新项目、清除项目缓存

    转自:https://www.cnblogs.com/suiyisuixing/p/7723458.html 点击File -> Invalidate caches ,点击之后在弹出框中点击确认 ...

  9. Android 数据库框架总结,总有一个适合你!

    一:OrmLite 简述: 优点: 1.轻量级:2.使用简单,易上手:3.封装完善:4.文档全面.缺点:1.基于反射,效率较低(本人还没有觉得效率低):2.缺少中文翻译文档 jar包 地址:http: ...

  10. n阶幻方问题

    转载自:http://blog.csdn.net/fengchaokobe/article/details/7437767 目录        第一节 n阶幻方问题       第二节 由n阶幻方引发 ...