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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python网络爬虫系列(三)——cookie的原理、保存与加载

發布時間:2024/7/5 python 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python网络爬虫系列(三)——cookie的原理、保存与加载 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、什么是cookie?

在網站中,http請求是無狀態的.也就是說即使第一次和服務器連接后并且登錄成功后,第二次請求服務器依然不能知道當前請求是哪個用戶。
cookie的出現就是為了解決這個問題,第一次登錄后服務器返回一些數據(cookie)給瀏覽器,然后瀏覽器保存在本地,當該用戶發送第二次請求的時候,就會自動的把上次請求存儲的cookie數據自動的攜帶給服務器,服務器通過瀏覽器攜帶的數據就能判斷當前用戶是哪個了。cookie存儲的數據量有限,不同的瀏覽器有不同的存儲大小,但一般不超過4KB.因此使用cookie 只能存儲一些小量的數據.
cookie的格式:

Set-Cookie:NAME=VALUE:Expires/Max-age=DATE;Path=PATH;Domain=DONAIIN_NAME;SECURE

參數意義:

  • NAME:cookie的名字。
  • VALUE:cookie的值。
  • Expires:cookie的過期時間。
  • Path:cookie作用的路徑。
  • Domain:cookie作用的域名。
  • SECURE:是否只在https協議下起作用。

使用cookielib庫和HTTPCookieProcessor模擬登錄:
Cookie是指網站服務器為了辨別用戶身份和進行Session跟蹤,而儲存在用戶刻覽器上的文本文件,Cookie可以保持登錄信息到用戶下次與服務器的會話。
這里以人人網為例。人人網中,要訪問某個人的主頁,必須先登錄才能訪問,登錄說白了就是要有cookie信息。那么如果我們想要用代碼的方式訪問,就必須要有正確的cookie信息才能訪問。解決方案有兩種,第一種是使用刻覽器訪問,然后將cookie信息復制下來,放到headers中。示例代碼如下:

from urllib import request# 1.不使用cookie請求大鵬主頁 # dapeng_url = "http://www.renren.com/880151247/profile" # headers = { # "User-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36" # # } # # req = request.Request(url=dapeng_url,headers=headers) # resp = request.urlopen(req) # # print(resp.read().decode('utf-8')) # with open('renren.html','w') as fp: # # write函數必須寫入一個str的數據類型 # # resp.read()讀出來的是bytes數據類型 # # bytes -> decode -> str # # str -> encode -> bytes # fp.write(resp.read().decode('utf-8'))# 2.使用cookie dapeng_url = "http://www.renren.com/880151247/profile" headers = {"User-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36","Cookie":"anonymid=kc8gdto1-vg5rhe; depovince=ZGQT; _r01_=1; taihe_bi_sdk_uid=e248d1662297420b5f06cd39f5473be6; JSESSIONID=abcd7dz_b4rckd6y2ZEmx; taihe_bi_sdk_session=73ccff9edc2442cb1943f51498722d59; ick_login=917cc18b-cda3-4db0-9cfb-da1e66d794ed; t=7e664919cb492b651432f05ae73537fd8; societyguester=7e664919cb492b651432f05ae73537fd8; id=974712998; xnsid=e1262476; jebecookies=cc307376-600f-4a31-8694-23c4c218aecb|||||; ver=7.0; loginfrom=null; XNESSESSIONID=ac057eb05af7; WebOnLineNotice_974712998=1"}req = request.Request(url=dapeng_url,headers=headers) resp = request.urlopen(req) # print(resp.read().decode('utf-8')) with open('renren1.html','w',encoding='utf-8') as fp:# write函數必須寫入一個str的數據類型# resp.read()讀出來的是bytes數據類型# bytes -> decode -> str# str -> encode -> bytesfp.write(resp.read().decode('utf-8'))


但是每次在訪問需要cookie的頁面都要從瀏覽器中復制cookiet較麻煩。在Python處理Cookie,一般是通過http.cookiejar模塊和ur11ib慣塊的HTTPCookieProcessor 處理器類一起使用。http.cookiejar模塊主要作用是提供用于存儲cookie的對象。
而HTTPCookieProcessor 處理器主要作用是處理這些cookie對象,并構建handler對象。

http.cookiejar模塊:
該模塊主要的類有CookieJar、FileCookieJar、MozllaCookieJar、LwPCookieJar。這四個類的作用分別如下:

  • CookieJar:管理HTTP cookie值、存儲HTTP請求生成的cookie、向傳出的HTTP請求添加cookie的對象。整個cookie都存儲在內存中,對CookieJar實例進行垃圾回收后cookie也將丟失。

  • FileCookieJar(filename.delayload=None,policy=None):從CookieJar派生而來,用來創建FileCookieJar實例,檢素cookie信息并將cookie存儲到文件中。filename是存儲cookie的文件名。delayload為True時支持延遲訪問訪問文件,即只有在需要時才讀取文件或在文件中存儲數據。

  • MozillaCookieJar(filename.delayload=None.policy=None):從FileCookieJar凝生而來,創建與Mozilla/覽器cookies.txt兼容的FileCookieJar實例。

  • LWPCookieJar(filename,delayload=None,policy=None):從FileCookieJar派生而來,創建與libwww-per標準的 Set-Cookie3文件格式兼容的FileCookieJar實例。

  • 利用http.cookiejar和request.HTTPCookieprocessor登錄人人網。相關示例代碼如下:

    from urllib import request from http.cookiejar import CookieJar from urllib import parse# 1、登錄 # 1.1 創建一個cookiejar對象 cookiejar = CookieJar()# 1.2 使用cookiejar創建一個HTTPCookieProcess對象 handler = request.HTTPCookieProcessor(cookiejar)# 1.3 使用上一步創建的handler創建一個opener opener = request.build_opener(handler)# 1.4 使用opener發送登錄請求(人人網的郵箱和密碼) headers = { "User-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36" } data = {'email':"你的用戶郵箱",'password':"密碼" }login_url = "http://www.renren.com/PLogin.do" req = request.Request(login_url,data=parse.urlencode(data).encode('utf-8'),headers=headers) opener.open(req)# 2、訪問個人主頁 dapeng_url = "http://www.renren.com/880151247/profile" # 獲取個人主頁信息頁面時,不要新建opener # 應該使用前面創建好的opener,因為之前的那個opener已經包含了登錄所需要的cookie信息 req = request.Request(dapeng_url,headers=headers) resp = opener.open(req) with open('renren2.html','w',encoding='utf-8') as fp :fp.write(resp.read().decode('utf-8')) from urllib import request from http.cookiejar import CookieJar from urllib import parseheaders = {"User-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36" }def get_opener():# 1、登錄# 1.1 創建一個cookiejar對象cookiejar = CookieJar()# 1.2 使用cookiejar創建一個HTTPCookieProcess對象handler = request.HTTPCookieProcessor(cookiejar)# 1.3 使用上一步創建的handler創建一個openeropener = request.build_opener(handler)return openerdef login_renren(opener):# 1.4 使用opener發送登錄請求(人人網的郵箱和密碼)data = {'email': "你的用戶郵箱",'password': "密碼"}login_url = "http://www.renren.com/PLogin.do"req = request.Request(login_url, data=parse.urlencode(data).encode('utf-8'), headers=headers)opener.open(req)def visit_profile(opener):# 2、訪問個人主頁dapeng_url = "http://www.renren.com/880151247/profile"# 獲取個人主頁信息頁面時,不要新建opener# 應該使用前面創建好的opener,因為之前的那個opener已經包含了登錄所需要的cookie信息req = request.Request(dapeng_url, headers=headers)resp = opener.open(req)with open('renren3.html', 'w', encoding='utf-8') as fp:fp.write(resp.read().decode('utf-8'))if __name__ == '__main__':opener = get_opener()login_renren(opener)visit_profile(opener)

    保存cookie到本地:
    保存cookie到本地,可以使用cookiejar的save方法,并且需要指定一個文件名:

    from urllib import request from http.cookiejar import MozillaCookieJarcookiejar = MozillaCookieJar('cookie.txt') handler = request.HTTPCookieProcessor(cookiejar) opener = request.build_opener(handler)resp = opener.open('http://www.baidu.com/')cookiejar.save()


    通過http://httpbin.org/cookies/set?course=abc 來設置cookie:

    from urllib import request from http.cookiejar import MozillaCookieJarcookiejar = MozillaCookieJar('cookie1.txt') # cookiejar.load() handler = request.HTTPCookieProcessor(cookiejar) opener = request.build_opener(handler)# resp = opener.open('http://www.baidu.com/') resp = opener.open('http://httpbin.org/cookies/set?course=abc') # resp = opener.open('http://httpbin.org/cookies') # for cookie in cookiejar: # print(cookie) cookiejar.save(ignore_discard=True)


    加載保存在本地的cookie:

    from urllib import request from http.cookiejar import MozillaCookieJarcookiejar = MozillaCookieJar('cookie1.txt') cookiejar.load(ignore_discard=True) # 加載保存在本地的cookie handler = request.HTTPCookieProcessor(cookiejar) opener = request.build_opener(handler)# resp = opener.open('http://www.baidu.com/') # resp = opener.open('http://httpbin.org/cookies/set?course=abc') resp = opener.open('http://httpbin.org/cookies') for cookie in cookiejar:print(cookie) # cookiejar.save(ignore_discard=True)

    創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的python网络爬虫系列(三)——cookie的原理、保存与加载的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。