python 爬蟲 cookie 的保存和加載

相關庫

Cookie (py2) 等於 http.cookie (py3)
cookielib (py2) 等於 http.cookiejar (py3)html

python3 處理 cookie

  • 保存到變量
import http.cookiejar, urllib.request
cj = http.cookiejar.CookieJar()
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcesser(cj))
r = opener.open('http://douban.com')
# 此時, cookie 已經保存在 cj 中了
for i in cj:
    print(i.name, i.value)
輸出:
bid "a3YOzYxKBc9"
ll "219731"
  • 保存到文件
import http.cookiejar, urllib.request
cj = http.cookiejar.MozillaCookieJar('cookie.txt')
# cj = http.cookiejar.LWPCookieJar() # 可讀性更好
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcesser(cj))
r = opener.open('http://douban.com')
cj.save() # 也能夠在這裏指定保存的文件名 cj.save('new_cookie.txt')
# save() 可設置過時參數 ignore_discard=True: 即便將被丟棄也保存. ignore_expires=True: 即便過時也保存
# cj.save(ignore_discard=True, ignore_expires=True)
  • 從文件加載 cookie
import http.cookiejar, urllib.request
cj = http.cookiejar.MozillaCookieJar()
cj.load('cookie.txt')
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))
req = urllib.request.Request('http://douban.com')
r = opener.open(req)
# 上兩句能夠這樣
# r = opener.open('http://douban.com')

python2 處理 cookie

  • 保存到變量
import cookielib, urllib2
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcesser(cj))
r = opener.open('http://douban.com')

requests 庫處理 cookie

  • 響應中的cookie
>>> r = requests.get('http://douban.com')
>>> r.cookies.items()
[('bid', '"/cMAIpJIhm0"'), ('ll', '"178229"')]
  • 發送 cookie
>>> url = 'http://httpbin.org/cookies'
>>> cookies = dict(cookies_are='working')

>>> r = requests.get(url, cookies=cookies)
>>> r.text
'{"cookies": {"cookies_are": "working"}}'
  • 經過會話Session保持cookie:
s = requests.Session()

s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
r = s.get("http://httpbin.org/cookies")

print(r.text)
# '{"cookies": {"sessioncookie": "123456789"}}'

s.cookies['cookie1'] = 'a'
s.cookies['cookie2'] = 'b'
  • 保存到文件, 從文件加載 requests.cookies.cookielib 至關於 http.cookiejar (py3) 和 cookielib (py2) requests.cookies.RequestsCookieJar 至關於 http.cookiejar.CookieJar (py3) 和 cookielib.CookieJar (py2)
將一個Session實例的cookies屬性設置賦值成 一個 CookieJar 實例
import http.cookiejar
s = requests.session  # 或 s = requests.Session()
s.cookies = http.cookiejar.LWPCookieJar('mycookie.txt')
s.get('http://douban.com')
s.save(ignore_expires=True, ignore_discard=True)  # 已保存到 mycookie.txt
s.cookies.clear()   # 清除
s.cookies.load('mycookie.txt') # 從文件加載
# s.cookies.revert() # 這個方法等於先清除後加載

python3 http.cookiejar
python2 cookielib
參考1
參考2
參考3
參考4
requests API文檔python

相關文章
相關標籤/搜索