Python爬虫学习日记:模拟带有cookie的登陆

来源:互联网 发布:windows api pdf 编辑:程序博客网 时间:2024/05/29 07:51

Python爬虫学习日记:模拟登陆

#! /usr/bin/env python#coding=utf-8import urllib2,urllib,cookielibdef login():    #第一部分是通过预访问的方式,获取目标网址的cookie信息    firstGetCookieUrl='http:/www.xxx.com/login'    # 获取cookiejar实例    cj = cookielib.LWPCookieJar()    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))    urllib2.install_opener(opener)    resq=urllib2.urlopen(firstGetCookieUrl)   #第二部分是从获取的cookie信息中提取需要的参数为字典    f = {}    for index, Cookie in enumerate(cj):        #列出cj中的phpsessid和csrf_name_cookie值        f[Cookie.name] = Cookie.value    #第三部分获取用户名和密码后登录指定网址    username = raw_input("请输入用户名:")    password = raw_input("请输入密码:")    #拿到需要的csrf_cookie_name参数    csrf_post_name = f.get('csrf_cookie_name')    data = {"username": username, "password": password, 'foward': 'null', 'csrf_test_name': csrf_post_name}    #将post的数据编码    data_encodeed=urllib.urlencode(data)    post_data='http://www.xxx.com/login'       #post_data = raw_input('请输入网址:')    #自己设置User-Agent(真实伪装,超越限制)    headers ={"User-agent":"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1"}    #带有请求信息请求登录目标网址    req=urllib2.Request(post_data,data_encodeed,headers)    content=opener.open(req)    print content.read()    #linux下没有gbk编码,只有utf-8编码if __name__ == '__main__':    login()

由于本次模拟登录的后台地址需要在post时的data信息中携带cookie值作为服务器的登录token校验
所以在第一部分先通过预访问的形式获取了cookie参数,并添加进入post请求的header中。
在第二三部分通过分解获得的cookie实例拿到具体的cookie参数值。并将其录入字典f中,为下一步data信息中需要的csrf_test_name参数做准备。
最后一部分是关键的登录操作。

备注:本次操作中比较麻烦的是获取cookie参数,由于cookielib初步获取的cookie实例为cookie instance格式,不太好提取(通过正则匹配应该可以,但是还没学会呢哈哈哈哈,所以曲线救国了)。查找资料后通过enumerate()将获得的cj值分解为列表格式,然后通过cookie的固定方法cookie.name,cookie.value获得具体的键对值。再将其写入至data信息中才完成了服务器端的token校验。

0 0
原创粉丝点击