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)
[root@localhost ~]$ 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()

 

 

 

 

 

 

 

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM