python爬蟲學習5_cookie的獲取、儲存和使用
阿新 • • 發佈:2019-01-01
python爬蟲學習5_cookie的獲取、儲存和使用
Cookie,指某些網站為了辨別使用者身份、進行session跟蹤而儲存在使用者本地終端上的資料(通常經過加密)。 比如說有些網站需要登入後才能訪問某個頁面,在登入之前,你想抓取某個頁面內容,登陸前與登陸後是不同的,或者不允許的。
在python中它為我們提供了cookiejar模組,它位於http包中,用於對Cookie的支援。通過它我們能捕獲cookie並在後續連線請求時重新發送,比如可以實現模擬登入功能。該模組主要的物件有CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。
## cookie的獲取
# -*- coding: UTF-8 -*- from urllib import request from http import cookiejar if __name__ == '__main__': #宣告一個CookieJar物件例項來儲存cookie cookie = cookiejar.CookieJar() #利用urllib.request庫的HTTPCookieProcessor物件來建立cookie處理器,也就CookieHandler handler=request.HTTPCookieProcessor(cookie) #通過CookieHandler建立opener opener = request.build_opener(handler) #此處的open方法開啟網頁 response = opener.open('http://www.baidu.com') #列印cookie資訊 for item in cookie: print('Name = %s' % item.name) print('Value = %s' % item.value)
cookie的檔案儲存
# -*- coding: UTF-8 -*- from urllib import request from http import cookiejar if __name__ == '__main__': #設定儲存cookie的檔案,同級目錄下的cookie.txt filename = 'cookie.txt' #宣告一個MozillaCookieJar物件例項來儲存cookie,之後寫入檔案 cookie = cookiejar.MozillaCookieJar(filename) #利用urllib.request庫的HTTPCookieProcessor物件來建立cookie處理器,也就CookieHandler handler=request.HTTPCookieProcessor(cookie) #通過CookieHandler建立opener opener = request.build_opener(handler) #此處的open方法開啟網頁 response = opener.open('http://www.baidu.com') #儲存cookie到檔案 cookie.save(ignore_discard=True, ignore_expires=True)
載入儲存的cookie,並進行網頁訪問
# -*- coding: UTF-8 -*- from urllib import request from http import cookiejar if __name__ == '__main__': #設定儲存cookie的檔案的檔名,相對路徑,也就是同級目錄下 filename = 'cookie.txt' #建立MozillaCookieJar例項物件 cookie = cookiejar.MozillaCookieJar() #從檔案中讀取cookie內容到變數 cookie.load(filename, ignore_discard=True, ignore_expires=True) #利用urllib.request庫的HTTPCookieProcessor物件來建立cookie處理器,也就CookieHandler handler=request.HTTPCookieProcessor(cookie) #通過CookieHandler建立opener opener = request.build_opener(handler) #此用opener的open方法開啟網頁 response = opener.open('http://www.baidu.com') #列印資訊 print(response.read().decode('utf-8'))
這裡對cookie的使用類似於,之前我們用到的對代理的使用。
載入cookie,實現網站的登入
# -*- coding: UTF-8 -*- from urllib import request from urllib import error from urllib import parse from http import cookiejar if __name__ == '__main__': #登陸地址 login_url = 'http://www.jobbole.com/wp-admin/admin-ajax.php' #User-Agent資訊 user_agent = r'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36' #Headers資訊 head = {'User-Agnet': user_agent, 'Connection': 'keep-alive'} #登陸Form_Data資訊 Login_Data = {} Login_Data['action'] = 'user_login' Login_Data['redirect_url'] = 'http://www.jobbole.com/' Login_Data['remember_me'] = '0' #是否一個月內自動登陸 Login_Data['user_login'] = '********' #改成你自己的使用者名稱 Login_Data['user_pass'] = '********' #改成你自己的密碼 #使用urlencode方法轉換標準格式 logingpostdata = parse.urlencode(Login_Data).encode('utf-8') #宣告一個CookieJar物件例項來儲存cookie cookie = cookiejar.CookieJar() #利用urllib.request庫的HTTPCookieProcessor物件來建立cookie處理器,也就CookieHandler cookie_support = request.HTTPCookieProcessor(cookie) #通過CookieHandler建立opener opener = request.build_opener(cookie_support) #建立Request物件 req1 = request.Request(url=login_url, data=logingpostdata, headers=head) #面向物件地址 date_url = 'http://date.jobbole.com/wp-admin/admin-ajax.php' #面向物件 Date_Data = {} Date_Data['action'] = 'get_date_contact' Date_Data['postId'] = '4128' #使用urlencode方法轉換標準格式 datepostdata = parse.urlencode(Date_Data).encode('utf-8') req2 = request.Request(url=date_url, data=datepostdata, headers=head) try: #使用自己建立的opener的open方法 response1 = opener.open(req1) response2 = opener.open(req2) html = response2.read().decode('utf-8') index = html.find('jb_contact_email') #列印查詢結果 print('聯絡郵箱:%s' % html[index+19:-2]) except error.URLError as e: if hasattr(e, 'code'): print("HTTPError:%d" % e.code) elif hasattr(e, 'reason'): print("URLError:%s" % e.reason)