Python學習之cookies及session用法

當想利用Python在網頁上發表評論的時候,需要一些賬號密碼登錄的信息,這個時候用requests.get()請求的話,賬號密碼全部會顯示在網址上,這顯然不科學!這個時候需要用post請求,可以這麼理解,get是明文顯示,post是非明文顯示。

通常,get請求會應用於獲取網頁數據,比如我們之前學的requests.get()。post請求則應用於向網頁提交數據,比如提交表單類型數據(像賬號密碼就是網頁表單的數據)。在post請求裏,我們使用data來傳遞參數,其用法和params非常相像。

當用到post請求時,需要了解兩個參數,cookies和session

1.cookies及其用法

當登錄一個網站,登錄頁面會有一個可勾選的選項“記住我”,如果你勾選了,以後你再打開這個網站就會自動登錄,這就是cookie在起作用。我們想要發表評論,首先得登錄,其次得提取和調用登錄的cookies,然後還需要評論的參數,才能發起評論的請求。

提取cookies的方法:調用requests對象的cookies屬性獲得登錄的cookies,並賦值給變量cookies,最後帶着cookies去請求發表評論

 例:

login_in = requests.post(url,headers=headers,data=data)
#用requests.post發起請求,放入參數:請求登錄的網址、請求頭和登錄參數,然後賦值給login_in。
cookies = login_in.cookies
#提取cookies的方法:調用requests對象(login_in)的cookies屬性獲得登錄的cookies,並賦值給變量cookies。

2.session及其用法

session是會話過程中,服務器用來記錄特定用戶會話的信息。session和cookies關係密切——cookies中存儲着session的編碼信息,session中又存儲了cookies的信息。

import requests
#引用requests。
session = requests.session()
#用requests.session()創建session對象,相當於創建了一個特定的會話,幫我們自動保持了cookies。

一般格式:

import requests
url_1 = 'https://…'
headers = {'user-agent':''}
data = {}
定義url,headers和data
login_in = requests.post(url,headers=headers,data=data)
cookies = login_in.cookies
完成登錄,獲取cookies
url_2 = 'https://…'
params = {}
定義url和params
response = requests.get(url,headers=headers,params=params,cookies=cookies)

示例:

import requests,json
session = requests.session()
#創建會話。
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'
}
#添加請求頭,避免被反爬蟲。
try:
#如果能讀取到cookies文件,執行以下代碼,跳過except的代碼,不用登錄就能發表評論。
    cookies_txt = open('cookies.txt', 'r')
    #以reader讀取模式,打開名爲cookies.txt的文件。
    cookies_dict = json.loads(cookies_txt.read())
    #調用json模塊的loads函數,把字符串轉成字典。
    cookies = requests.utils.cookiejar_from_dict(cookies_dict)
    #把轉成字典的cookies再轉成cookies本來的格式。
    cookies = session.cookies
    #獲取會話下的cookies

except FileNotFoundError:
#如果讀取不到cookies文件,程序報“FileNotFoundError”(找不到文件)的錯,則執行以下代碼,重新登錄獲取cookies,再評論。

    url = ' https://wordpress-edu-3autumn.localprod.forc.work/wp-login.php'
    #登錄的網址。
    data = {'log': input('請輸入你的賬號:'),
            'pwd': input('請輸入你的密碼:'),
            'wp-submit': '登錄',
            'redirect_to': 'https://wordpress-edu-3autumn.localprod.forc.work/wp-admin/',
            'testcookie': '1'}
    #登錄的參數。
    session.post(url, headers=headers, data=data)
    #在會話下,用post發起登錄請求。

    cookies_dict = requests.utils.dict_from_cookiejar(session.cookies)
    #把cookies轉化成字典。
    cookies_str = json.dumps(cookies_dict)
    #調用json模塊的dump函數,把cookies從字典再轉成字符串。
    f = open('cookies.txt', 'w')
    #創建名爲cookies.txt的文件,以寫入模式寫入內容
    f.write(cookies_str)
    #把已經轉成字符串的cookies寫入文件
    f.close()
    #關閉文件

url_1 = 'https://wordpress-edu-3autumn.localprod.forc.work/wp-comments-post.php'
#文章的網址。
data_1 = {
'comment': input('請輸入你想評論的內容:'),
'submit': '發表評論',
'comment_post_ID': '7',
'comment_parent': '0'
}
#評論的參數。
session.post(url_1, headers=headers, data=data_1)
#在會話下,用post發起評論請求。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章