Python cookielib 模块

Posted 孔雀东南飞

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python cookielib 模块相关的知识,希望对你有一定的参考价值。

什么是 cookie :

指某些网站为了辨别用户身份,进行 session 跟踪而储存在用户本地终端上的数据,通常以 txt 文件形式存储。比如你登录了淘宝,浏览器就会
保存 cookie 信息,这样我们浏览淘宝的其他商家页面就不需要再重新登录了;如果没有保存 cookie 信息,你每切换到另一个页面都要登录一次。

cookielib 一般用于客户端处理 HTTP cookie 信息,通过它可以从服务器端获取 cookie 信息,反过来又可以通过它将获取到的 cookie 发送给服务器

如何获取 cookie :

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import urllib2
import cookielib

url = http://www.baidu.com/
cookies = cookielib.CookieJar()                   # CookieJar()方法用于收集cookie信息,只有当我们访问一个URL的时候才会有cookie信息,目前只是创建一个cookie对象,里面是没有值的
handler = urllib2.HTTPCookieProcessor(cookies)    # 使用 urllib2 的 HTTPCookieProcessor() 方法,创建一个 cookie 处理器,对收集到的 cookie 进行处理
opener = urllib2.build_opener(handler)            # 使用 urllib2 的 build_opener() 方法,创建一个 opener 实例,该实例用于处理给定的URL链接
response = opener.open(url)                       # opener.open(url) 相当于 urllib2.urlopen(url),打开链接之后,上面定义的 cookies 就有值了

for cookie in cookies:
    print "%s: %s" % (cookie.name, cookie.value)
[[email protected] ~]$ python 1.py 
BAIDUID: 006F1423AFEFD18A005B7C77DF41CF12:FG=1
BIDUPSID: 006F1423AFEFD18A005B7C77DF41CF12
H_PS_PSSID: 1431_21104_18560_26350_22157
PSTM: 1550233508
delPer: 0
BDSVRTM: 0
BD_HOME: 0


爬虫中的用法:

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import re
import sys
import urllib
import urllib2
import cookielib

class AdminSite(object):

    def __init__(self):
        self.login_url = http://www.xxxx.com:8899/accounts/login/    # 登录页面的URL
        self.request_url = http://www.xxxx.com:8899/yunwei/index/    # 要爬取的页面的URL
        self.headers = {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.81 Safari/537.36}
        
    def getPage(self):
        cookie = cookielib.CookieJar()
        handler = urllib2.HTTPCookieProcessor(cookie)
        self.opener = urllib2.build_opener(handler)

        try:
            request = urllib2.Request(url=self.request_url, headers=self.headers)
            response = self.opener.open(request)
            return response.read()
        except urllib2.URLError, e:
            if hasattr(e, code):
                print 连接服务器失败,错误代码:%s % e.code
            if hasattr(e, reason):
                print 连接服务器失败,失败原因:%s % e.reason
            else:
                print 连接服务器失败,失败原因:%s % e
            sys.exit(1)
          
    def getToken(self):
        page = self.getPage()
        regular = re.compile(r"<form.*?<input.*?value=‘(.*?)‘.*?>", re.S)
        token = regular.search(page)
        if token:
            return token.group(1)
        else:
            return None

    def login(self):
        form_data = {csrfmiddlewaretoken: self.getToken(),
                     username: xxxxxx,
                     password: xxxxxx,
                     next: /yunwei/index/}
        self.post_data = urllib.urlencode(form_data) 
        try:
            request = urllib2.Request(url=self.login_url, data=self.post_data, headers=self.headers)
            response = self.opener.open(request)
            print response.read()
            return response.read()
        except urllib2.URLError, e:
            if hasattr(e, code):
                print 连接服务器失败,错误代码:%s % e.code
            if hasattr(e, reason):
                print 连接服务器失败,失败原因:%s % e.reason
            else:
                print 连接服务器失败,失败原因:%s % e
            sys.exit(1)

if __name__ == __main__:
    obj = AdminSite()
    obj.login()

 

 

 

 

 

 

 

    

以上是关于Python cookielib 模块的主要内容,如果未能解决你的问题,请参考以下文章

python cookielib

Python 常用系统模块整理

Python3导入cookielib失败

python 3.x报错:No module named 'cookielib'或No module named 'urllib2'

python 使用urllib2和cookielib从GET请求打印cookie

“人生苦短,我用Python“——Web测试