2
回答
用python登陆新浪微博手机端weibo.cn遇到302重定向如何解决
极速云服务器,低至1.04元/天>>>   

用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=(.*?)&amp;backURL=[\s\S]*?vt=4&amp;revalid=2&amp;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。对你之前的帮助,我表示非常感谢,作为菜鸟,只有仰望。谢谢了。



举报
alvpotato
发帖于2年前 2回/896阅
顶部