设为首页 收藏本站
查看: 856|回复: 0

[经验分享] python版 百度签到

[复制链接]

尚未签到

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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-58729-1-1.html 上篇帖子: Python进制转换(二进制、十进制和十六进制) 下篇帖子: 编写Tesseract的Python扩展
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表