python requests模拟登陆出现重定向的问题?

我用python的requests模拟登陆我学校的一个网站,用登陆返回的cookie来访问其中一些需要登陆才能访问的网页,有些网页可以访问,但是有些网页返回的却是登陆页面,为什么回这样?我用wireshark抓包看了一下,出现302重定向的问题,就是我访问一些网页回重定向到登陆页面,但有些网页又不会,这是为什么呢?python爬虫新手,希望各位大佬多多指教
代码如下:

#coding:utf-8
import urllib
import requests

login_url = "http://ctcp.scnu.edu.cn/scnu/login"    #登陆页面

def ctcp_crawler (username, password, roleId, url) :
    #需要post的数据
    data = urllib.urlencode ({
        "username" : "username",
        "password" : "password",
        "roleId" : "3"
    })
    headers = {'User-agent' : 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0'}   #头

    s = requests.Session ()     #建立一个会话
    response = s.post (login_url, data = data, headers = headers)   #post登陆信息获取cookies
    result = s.get (url, cookies = response.cookies)    #访问目标url
    return result

url = raw_input ("请输入需要访问的url:")
#username = raw_input ("请输入用户名:")
#password = raw_input ("请输入密码:")

print ctcp_crawler ("手动马赛克", "手动马赛克", "3", url).content
阅读 8.5k
1 个回答

这个其实就要看看你这句是否登陆成功了,确认一下登陆的结果:

response = s.post (login_url, data = data, headers = headers)
print response.content
print response.cookies

如果根据这个找不到原因,那就排查一下s.get存在其他的原因,就知道了,其实用不着wireshark这么麻烦:

result = s.get (url, cookies = response.cookies)
print result.url # 知道实际上被重定向后的链接是什么
print result.content # 返回来什么内容
print result.status_code # 状态码

请求结果的其他属性或方法可以看看这个:http://docs.python-requests.o...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题