用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