簡介
有時候我們需要爬一些需要登錄才能進入網頁,這個時候就要用到cookie相關的一些模塊來操作了
內置的http包里包含了cookie相關的一些模塊,通過她們我們可以自動使用cookie
- CookieJar
- 管理儲存cookie,像傳出的http請求添加cookie
- cookie存儲在內存中,CookieJar示例回收后cookie將自動消失
- FileCookieJar
- 是CookieJar的字類
- cookie保存在文件中
- MozillaCookiejar
- 是FileCookieJar的子類
- 與moccilla瀏覽器兼容
- LwpCookieJar
- 是FileCookieJar的子類
- 與libwww-perl標准兼容
案例
訪問登錄后的人人網主頁
from urllib import request,parse
from http import cookiejar
# 創建cookiejar實例對象
cookie = cookiejar.CookieJar()
# 根據創建的cookie生成cookie的管理器
cookie_handle = request.HTTPCookieProcessor(cookie)
# 創建http請求管理器
http_handle = request.HTTPHandler()
# 創建https管理器
https_handle = request.HTTPSHandler()
# 創建求求管理器,將上面3個管理器作為參數屬性
# 有了opener,就可以替代urlopen來獲取請求了
opener = request.build_opener(cookie_handle,http_handle,https_handle)
def login():
'''
負責初次登錄
需要傳遞用戶名和密碼,來獲取登錄的cookie憑證
'''
# 登錄url,需要從登錄form的action屬性中獲取
url = 'http://www.renren.com/PLogin.do'
# 登錄所需要的數據,數據為字典形式,
# 此鍵值需要從form扁擔中對應的input的name屬性中獲取
data = {
'email':'136808069@qq.com',
'password':'123456'
}
# 將數據解析成urlencode格式
data = parse.urlencode(data)
req = request.Request(url,data=data)
# 正常是用request.urlopen(),這里用opener.open()發起請求
response = opener.open(req)
def getHomePage():
'''
獲取登錄后的頁面
'''
# 此url是登錄后的鏈接地址
url = 'http://www.renren.com/965187997/profile'
# 如果已經執行了上面的login函數,
# 那么此時的opener已經是包含了cookie信息的一個opener對象
res = opener.open(url)
html = res.read().decode()
with open('renren.html','w') as f:
f.write(html)
if __name__ == '__main__':
'''
依次執行上面兩個函數
'''
login()
getHomePage()
