Python爬蟲教程-14-爬蟲使用filecookiejar儲存cookie檔案(人人網)

肖朋偉發表於2018-09-06

Python爬蟲教程-14-爬蟲使用filecookiejar儲存cookie檔案(人人網)

  • 上一篇介紹了利用CookieJar訪問人人網,本篇將使用filecookiejar將cookie以檔案形式儲存
  • 自動使用cookie登入,使用步驟:
    • 1.開啟登入頁面後,通過使用者名稱密碼登入
    • 2.自動提取反饋回來的cookie
    • 3.利用提取的cookie登入個人資訊頁面
    • 建立cookiejar例項
    • 生成cookie的管理器
    • 建立http請求管理器
    • 建立https請求的管理器
    • 建立請求管理器
    • 通過輸入使用者名稱和密碼,獲取cookie
  • 程式碼:
# 建立cookiejar的例項
cookie = cookiejar.CookieJar()
# 常見cookie的管理器
cookie_handler = request.HTTPCookieProcessor(cookie)
# 建立http請求的管理器
http_handler = request.HTTPHandler()

# 生成https管理器
https_handler = request.HTTPSHandler()

# 建立請求管理器
opener = request.build_opener(http_handler,https_handler,cookie_handler)

建立handle後,使用opener開啟,開啟後相應的業務由相應的handle處理

cookie作為一個變數列印出來

# 使用cookiejar
# cookie作為一個變數列印出來
from urllib import request,parse
from http import cookiejar

# 建立cookiejar的例項
cookie = cookiejar.CookieJar()
# 常見cookie的管理器
cookie_handler = request.HTTPCookieProcessor(cookie)
# 建立http請求的管理器
http_handler = request.HTTPHandler()

# 生成https管理器
https_handler = request.HTTPSHandler()

# 建立請求管理器
opener = request.build_opener(http_handler,https_handler,cookie_handler)

def login():
    # 負責首次登入,輸入使用者名稱和密碼,用來獲取cookie
    url = 'http://www.renren.com/PLogin.do'

    id = input('請輸入使用者名稱:')
    pw = input('請輸入密碼:')

    data = {
        # 引數使用正確的使用者名稱密碼
        "email": id,
        "password": pw
    }
    # 把資料進行編碼
    data = parse.urlencode(data)
    # 建立一個請求物件
    req = request.Request(url,data=data.encode('utf-8'))
    # 使用opener發起請求
    rsp = opener.open(req)

# 以上程式碼就可以進一步獲取cookie了,cookie在哪呢?cookie在opener裡
def getHomePage():
    # 地址是用在瀏覽器登入後的個人資訊頁地址
    url = "http://www.renren.com/967487029/profile"

    # 如果已經執行login函式,則opener自動已經包含cookie
    rsp = opener.open(url)
    html = rsp.read().decode()

    with open("rsp1.html", "w", encoding="utf-8")as f:
        # 將爬取的頁面
        print(html)
        f.write(html)

if __name__ == '__main__':
    login()
    # 執行完login之後,會得到授權之後的cookie,下一步列印出來
    print(cookie)
    for item in cookie:
        print(type(item))
        print(item)
        for i in dir(item):
            print(i)

我們使用print(i)列印出來了cookie的所有屬性
這裡寫圖片描述
下面介紹常用的屬性

cookie的屬性

  • name:名稱
  • value:值
  • domain:可以訪問此cookie的域名
  • path:可以訪問此cookie的頁面路徑
  • expires:過期時間
  • size:大小
  • http:欄位
cookie的值雖然可以自己修改,但是修改後就會導致和伺服器端資料不一致,而使cookie無效,最終登入失敗

cookie的儲存-FileCookieJar


# 使用filecookiejar
from urllib import request,parse
from http import cookiejar

# 建立cookiejar的例項
filename = "py15renrenCookie.txt"
cookie = cookiejar.MozillaCookieJar(filename)
# 常見cookie的管理器
cookie_handler = request.HTTPCookieProcessor(cookie)
# 建立http請求的管理器
http_handler = request.HTTPHandler()

# 生成https管理器
https_handler = request.HTTPSHandler()

# 建立請求管理器
opener = request.build_opener(http_handler,https_handler,cookie_handler)

def login():
    # 負責首次登入,輸入使用者名稱和密碼,用來獲取cookie
    url = 'http://www.renren.com/PLogin.do'

    id = input('請輸入使用者名稱:')
    pw = input('請輸入密碼:')

    data = {
        # 引數使用正確的使用者名稱密碼
        "email": id,
        "password": pw
    }
    # 把資料進行編碼
    data = parse.urlencode(data)
    # 建立一個請求物件
    req = request.Request(url,data=data.encode('utf-8'))
    # 使用opener發起請求
    rsp = opener.open(req)

    '''
    儲存cookie到檔案
    兩個引數:
        ignore_discard:表示及時cookie將要被丟棄,是否儲存下來
        ignore_expires:表示如果該檔案中cookie已經過期,是否儲存下來
    '''
    cookie.save(ignore_discard=True, ignore_expires=True)

if __name__ == '__main__':

    login()

執行結果

這裡寫圖片描述
本篇使用filecookiejar將cookie以檔案形式儲存

更多文章連結:Python 爬蟲隨筆


  • 本筆記不允許任何個人和組織轉載

相關文章