开发者社区> 问答> 正文

用python登陆新浪微博手机端weibo.cn遇到302重定向如何解决? 400 报错

用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。对你之前的帮助,我表示非常感谢,作为菜鸟,只有仰望。谢谢了。



展开
收起
爱吃鱼的程序员 2020-05-31 00:36:57 1416 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    先用pep8风格好好格式化一下你的代码。

    requests这个类库就是urllib的上层封装,理论上你不再需要import urllib(2),requests很简单,根本没这么繁琐。你好好去读requests的官方文档,有处理302的方法。

    ######你好,在问题里面修改了,写了我的疑问,非常感谢你第一次的帮助。现在是有没有别的方法获取location。谢谢了。######你可以参考下这个https://github.com/yoyzhou/weibo_login
    2020-05-31 00:36:58
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载