用python登陆新浪微博手机端weibo.cn遇到302重定向如何解决? 400 报错
用python3.4模拟登陆weibo.cn,我是这样做的,第一,登陆weibo.cn获得登陆界面,获得一些变量数据,
第二,我用requests模拟表单提交,
第三,遇到了302重定向,想用requests来获取重定向的网址,完成三次重定向得到最后结果,但是都不成功,不知道出错在哪里了。请问这个怎么处理,后面附上了代码,麻烦有大牛能提点一下
下面是我的代码,谢谢了。
#encoding:utf-8 import urllib.request,unicodedata,sys,codecs,urllib,urllib.parse,re,http.cookiejar,requests def weibo(): header={ "User-Agent":"Mozilla/5.0 (Windows NT 6.1; rv:7.0) Gecko/20100101 Firefox/7.0", "Host":"login.weibo.cn", "Referer":"http://weibo.cn/pub/", } cookie=http.cookiejar.CookieJar() cookieProc=urllib.request.HTTPCookieProcessor(cookie) opener=urllib.request.build_opener(cookieProc) urllib.request.install_opener(opener) url1="http://login.weibo.cn/login/?ns=1&revalid=2&backURL=http%3A%2F%2Fweibo.cn%2F&backTitle=%CE%A2%B2%A9&vt=4" req1=urllib.request.Request(url=url1,headers=header) html=urllib.request.urlopen(req1).read().decode("utf-8") # print(html) t=re.findall("""<input type="password" name="(.*?)" size="30" />[\s\S]*?<input type="hidden" name="vk" value="(.*?)" />""",html) t1=re.findall("""rand=(.*?)&backURL=[\s\S]*?vt=4&revalid=2&ns=1" method="post">""",html) pw=t[0][0] vk1=t[0][1] rand1=t1[0] print(pw,vk1) print(rand1) #-----------------------获得一些变量-------------------------- login_data={ "mobile":"zhanghao", pw:"mima", "remember":"on", "backURL":"http://weibo.cn/", "backTitle":"微博", "vk":vk1, "submit":"登录", } login_url="http://login.weibo.cn/login/?rand="+rand1+"&backURL=http%3A%2F%2Fweibo.cn%2F&backTitle=%CE%A2%B2%A9&vt=4&revalid=2&ns=1" print(login_url) postdata=urllib.parse.urlencode(login_data).encode(encoding='utf-8') r1=requests.post(url=login_url,data=postdata,headers=header,allow_redirects=True) x1=r1.url y=r1.status_code z=r1.history print(x1) print(y) print(z) if __name__=="__main__": weibo()
你好,我看了你的建议,去看了那些文章介绍,用requests,完成了两次跳转302跳转,还有最后一个是301重定向,固定地址跳转,去找发现这个跳转里面有location,想用http.client来抓取location,但是我用的是python3.4版本,去看了https://docs.python.org/3.4/library/http.client.html,发现python3.4中的http.client.HTTPConnection去掉了。不知道怎么才能获得这个location。对你之前的帮助,我表示非常感谢,作为菜鸟,只有仰望。谢谢了。
先用pep8风格好好格式化一下你的代码。
requests这个类库就是urllib的上层封装,理论上你不再需要import urllib(2),requests很简单,根本没这么繁琐。你好好去读requests的官方文档,有处理302的方法。
######你好,在问题里面修改了,写了我的疑问,非常感谢你第一次的帮助。现在是有没有别的方法获取location。谢谢了。######你可以参考下这个https://github.com/yoyzhou/weibo_login版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。