urllib的实现---cookie处理
Cookie的使用
用 Python 來登錄網站, 用Cookies記錄登錄信息, 然后就可以抓取登錄之后才能看到的信息。
什么是cookies?
Cookie,指某些網站為了辨別用戶身份、進行session跟蹤而儲存在用戶本地終端上的數據(通常經過加密)。
比如說有些網站需要登錄后才能訪問某個頁面,在登錄之前,你想抓取某個頁面內容是不允許的。那么我們可以利用Urllib庫保存我們登錄的Cookie,然后再抓取其他頁面就達到目的了。
opener的概念
當你獲取一個URL你使用一個opener(一個urllib2.OpenerDirector的實例)。在前面,我們都是使用的默認的opener,也就是urlopen。
urlopen是一個特殊的opener,可以理解成opener的一個特殊實例,傳入的參數僅僅是url,data,timeout。
如果我們需要用到Cookie,只用這個opener是不能達到目的的,所以我們需要創(chuàng)建更一般的opener來實現對Cookie的設置。
Cookielib
cookielib模塊的主要作用是提供可存儲cookie的對象,以便于與urllib2模塊配合使用來訪問Internet資源。Cookielib模塊非常強大,我們可以利用本模塊的CookieJar類的對象來捕獲cookie并在后續(xù)連接請求時重新發(fā)送,比如可以實現模擬登錄功能。該模塊主要的對象有CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。
它們的關系:CookieJar —-派生—->FileCookieJar ?—-派生—–>MozillaCookieJar和LWPCookieJar
使用cookie登錄的步驟
1)獲取Cookie保存到變量
我們使用以上方法將cookie保存到變量中,然后打印出了cookie中的值,運行結果如下
Name = YF-Page-G0
Value = dc8d8d4964cd93a7c3bfa7640c1bd10c
Note:py3中opener也可以這樣使用:
request = urllib.request.Request(URL_ROOT, postdata, headers) response = opener.open(request)或者:
urllib.request.install_opener(opener) request = urllib.request.Request(URL_ROOT, postdata, headers) response = urllib.request.urlopen(request)2)保存Cookie到文件
上面我們將cookie保存到了cookie這個變量中,如果我們想將cookie保存到文件中該怎么做呢?
這時,我們就要用到FileCookieJar這個對象了,在這里我們使用它的子類MozillaCookieJar來實現Cookie的保存
?
import urllib.request, urllib.parse, urllib.error import http.cookiejarURL_ROOT = 'http://www.jobbole.com/login/' values = {'name': '******', 'password': '******'} postdata = urllib.parse.urlencode(values).encode() user_agent = r'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36' headers = {'User-Agent': user_agent}cookie_filename = 'cookie.txt' cookie = http.cookiejar.LWPCookieJar(cookie_filename) handler = urllib.request.HTTPCookieProcessor(cookie) opener = urllib.request.build_opener(handler)request = urllib.request.Request(URL_ROOT, postdata, headers) try:response = opener.open(request) except urllib.error.URLError as e:print(e.reason)cookie.save(ignore_discard=True, ignore_expires=True) # 保存cookie到cookie.txt中 for item in cookie:print('Name = ' + item.name)print('Value = ' + item.value)?
Note:?
1. 不同cookie寫入文件方法的解釋:
FileCookieJar(filename):創(chuàng)建FileCookieJar實例,檢索cookie信息并將信息存儲到文件中,filename是文件名。
MozillaCookieJar(filename):創(chuàng)建與Mozilla cookies.txt文件兼容的FileCookieJar實例。
LWPCookieJar(filename):創(chuàng)建與libwww-perl Set-Cookie3文件兼容的FileCookieJar實例。
2. save方法的兩個參數的官方解釋:
ignore_discard: save even cookies set to be discarded.?即使cookies將被丟棄也將它保存下來
ignore_expires: save even cookies that have expiredThe file is overwritten if it already exists.如果在該文件中cookies已經存在,則覆蓋原文件寫入
3. python3中如果直接使用http.cookiejar.CookieJar(filename)的方式會出錯:self._policy._now = self._now = int(time.time())?AttributeError: 'str' object has no attribute?'_now'。注意要將CookieJar改為LWPCookieJar。
3)從文件中獲取Cookie并訪問
那么我們已經做到把Cookie保存到文件中了,如果以后想使用,可以利用下面的方法來讀取cookie并訪問網站,感受一下
?
http://blog.csdn.net/pipisorry/article/details/47905781
轉載于:https://www.cnblogs.com/mrwuzs/p/8018240.html
總結
以上是生活随笔為你收集整理的urllib的实现---cookie处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: checkbox反复调用attr('ch
- 下一篇: apache phoenix 安装试用