日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

urllib的实现---cookie处理

發(fā)布時間:2025/3/8 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 urllib的实现---cookie处理 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Cookie的使用

用 Python 來登錄網(wǎng)站, 用Cookies記錄登錄信息, 然后就可以抓取登錄之后才能看到的信息。

什么是cookies?

Cookie,指某些網(wǎng)站為了辨別用戶身份、進行session跟蹤而儲存在用戶本地終端上的數(shù)據(jù)(通常經(jīng)過加密)。
比如說有些網(wǎng)站需要登錄后才能訪問某個頁面,在登錄之前,你想抓取某個頁面內(nèi)容是不允許的。那么我們可以利用Urllib庫保存我們登錄的Cookie,然后再抓取其他頁面就達到目的了。
opener的概念
當你獲取一個URL你使用一個opener(一個urllib2.OpenerDirector的實例)。在前面,我們都是使用的默認的opener,也就是urlopen。

urlopen是一個特殊的opener,可以理解成opener的一個特殊實例,傳入的參數(shù)僅僅是url,data,timeout。
如果我們需要用到Cookie,只用這個opener是不能達到目的的,所以我們需要創(chuàng)建更一般的opener來實現(xiàn)對Cookie的設置。
Cookielib
cookielib模塊的主要作用是提供可存儲cookie的對象,以便于與urllib2模塊配合使用來訪問Internet資源。Cookielib模塊非常強大,我們可以利用本模塊的CookieJar類的對象來捕獲cookie并在后續(xù)連接請求時重新發(fā)送,比如可以實現(xiàn)模擬登錄功能。該模塊主要的對象有CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。
它們的關系:CookieJar —-派生—->FileCookieJar ?—-派生—–>MozillaCookieJar和LWPCookieJar

使用cookie登錄的步驟
1)獲取Cookie保存到變量

import urllib.request import http.cookiejarURL_ROOT = r'http://d.weibo.com/'cookie = http.cookiejar.CookieJar() # 聲明一個CookieJar對象實例來保存cookie handler = urllib.request.HTTPCookieProcessor(cookie) # 利用urllib2庫的HTTPCookieProcessor對象來創(chuàng)建cookie處理器 opener = urllib.request.build_opener(handler) # 通過handler來構(gòu)建openerresponse = opener.open(URL_ROOT) # 此處的open方法同urllib2的urlopen方法,也可以傳入requestfor item in cookie:print('Name = ' + item.name)print('Value = ' + item.value)

我們使用以上方法將cookie保存到變量中,然后打印出了cookie中的值,運行結(jié)果如下
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來實現(xiàn)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方法的兩個參數(shù)的官方解釋:

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已經(jīng)存在,則覆蓋原文件寫入

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并訪問
那么我們已經(jīng)做到把Cookie保存到文件中了,如果以后想使用,可以利用下面的方法來讀取cookie并訪問網(wǎng)站,感受一下

import urllib.request import urllib.parse import urllib.error import http.cookiejarcookie_filename = 'cookie_jar.txt' cookie = http.cookiejar.MozillaCookieJar(cookie_filename) cookie.load(cookie_filename, ignore_discard=True, ignore_expires=True) handler = urllib.request.HTTPCookieProcessor(cookie) opener = urllib.request.build_opener(handler)get_url = 'http://www.jobbole.com/' # 利用cookie請求訪問另一個網(wǎng)址 get_request = urllib.request.Request(get_url) get_response = opener.open(get_request) print(get_response.read().decode())

?

http://blog.csdn.net/pipisorry/article/details/47905781

轉(zhuǎn)載于:https://www.cnblogs.com/mrwuzs/p/8018240.html

總結(jié)

以上是生活随笔為你收集整理的urllib的实现---cookie处理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。