爬蟲多次爬取時候cookie的存儲用於登入


一.用requests模塊自動保存(保存緩存中)

  • 構建一個session對象session = requests.session()

  • 用構建的session代替requests進行訪問他就會自動存啦

import requests
session = requests.session()
r = session.get(......)   #他會存返回的cookies不會存發送的cookies
r = session.post(......)  #在請求同一url他會把存的cookies發送過去

注意點

  • 只存響應的cookie
  • 不存發送請求時候帶的cookie
  • 不同url沒有影響
  • cookie名字一樣會覆蓋掉

原因自己看下面自己看哈,有問題可以私聊我

二.將cookie存本地

1.基於session(推薦使用代碼少哈哈)

import requests
from  http import  cookiejar

session =requests.session()
session.cookies = cookiejar.LWPCookieJar()  #MozillaCookieJar或LWPCookieJar。


session.cookies.save(filename='1.txt')   //存cookie

session.cookies.load(filename='1.txt')   //讀cookie

2.普通請求把cookies存本地

這個參照https://www.cnblogs.com/fu-yong/p/9032902.html

第一次訪問

from urllib import request,parse
from http import cookiejar
 
# 創建filecookiejar實例對象
# 它需要一個參數,既cookie保存的位置
filename = 'cookie.txt'
cookie = cookiejar.FileCookieJar(filename)
 
# 根據創建的cookie生成cookie的管理器
cookie_handle = request.HTTPCookieProcessor(cookie)
 
# 創建http請求管理器
http_handle = request.HTTPHandler()
 
# 創建https管理器
https_handle = request.HTTPSHandler()
 
# 創建求求管理器,將上面3個管理器作為參數屬性
# 有了opener,就可以替代urlopen來獲取請求了
opener =  request.build_opener(cookie_handle,http_handle,https_handle)

# 登錄url,需要從登錄form的action屬性中獲取
url = 'xxxxxxxxxxxxxx'

# 登錄所需要的數據,數據為字典形式,
# 此鍵值需要從form扁擔中對應的input的name屬性中獲取
data = {
    'email':'xxxx',
    'password':'xxxxx'
}

# 將數據解析成urlencode格式
data = parse.urlencode(data)

req = request.Request(url,data=data)

# 正常是用request.urlopen(),這里用opener.open()發起請求
response = opener.open(req)

# 保存cookie文件
cookie.save()

第二次訪問

from urllib import request,parse
from http import cookiejar
 
# 創建cookiejar實例對象
cookie = cookiejar.FileCookieJar()
 
# 讀取已經保存的cookie文件
# 讀取之后,就無需登錄,直接訪問主頁即可
cookie.load('cookie.txt')
 
# 根據創建的cookie生成cookie的管理器
cookie_handle = request.HTTPCookieProcessor(cookie)
 
# 創建http請求管理器
http_handle = request.HTTPHandler()
 
# 創建https管理器
https_handle = request.HTTPSHandler()
 
# 創建求求管理器,將上面3個管理器作為參數屬性
# 有了opener,就可以替代urlopen來獲取請求了
opener =  request.build_opener(cookie_handle,http_handle,https_handle)

url = 'http://xxxxxx'
res = opener.open(url)
 
html = res.read().decode()

with open('renren.html','w') as f:
        f.write(html)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM