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

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

#! /usr/bin/env python
#coding=utf-8
import urllib2,urllib,cookielib


def 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校验。

你可能感兴趣的:(python-爬虫)