session及其用法
所謂的會話,你能夠理解成咱們用瀏覽器上網,到關閉瀏覽器的這一過程。
session是會話過程當中,服務器用來記錄特定用戶會話的信息。
好比你打開瀏覽器逛購物網頁的整個過程當中,瀏覽了哪些商品,在購物車裏放了多少件物品,
這些記錄都會被服務器保存在session中。
若是沒有session,可能會出現這樣搞笑的狀況:
你加購了不少商品在購物車,打算結算時,發現購物車空無一物Σ(っ°Д°;)っ,
由於服務器根本沒有幫你記錄你想買的商品。
session和cookies的關係還很是密切
cookies中存儲着session的編碼信息,session中又存儲了cookies的信息
瀏覽器第一次訪問購物網頁時,服務器返回set cookies的字段給瀏覽器,瀏覽器把cookies保存到本地
等瀏覽器第二次訪問這個購物網頁時,就會帶着cookies去請求,
cookies裏帶有會話的編碼信息,服務器立馬就能辨認出用戶,同時返回和這個用戶相關的session。
這也是爲何你每次從新登陸購物網站後,你以前在購物車放入的商品並不會消失的緣由。
由於你在登陸時,服務器能夠經過瀏覽器攜帶的cookies,找到保存了你購物車信息的session。
import requests
#引用requests。
session = requests.session()
#用requests.session()建立session對象,至關於建立了一個特定的會話,幫咱們自動保持了cookies。
url = 'https://wordpress-edu-3autumn.localprod.forc.work/wp-login.php'
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
}
data = {
'log':input('請輸入帳號:'), #用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)
#在建立的session下用post發起登陸請求,放入參數:請求登陸的網址、請求頭和登陸參數。
url_1 = 'https://wordpress-edu-3autumn.localprod.forc.work/wp-comments-post.php'
#把咱們想要評論的文章網址賦值給url_1。
data_1 = {
'comment': input('請輸入你想要發表的評論:'),
'submit': '發表評論',
'comment_post_ID': '13',
'comment_parent': '0'
}
#把有關評論的參數封裝成字典。
comment = session.post(url_1,headers=headers,data=data_1)
#在建立的session下用post發起評論請求,放入參數:文章網址,請求頭和評論參數,並賦值給comment。
print(comment)
#打印comment
複製代碼
使用requests.session(), 你就不用在考慮cookies的問題了
存儲cookies
import requests
session = requests.session()
url = 'https://wordpress-edu-3autumn.localprod.forc.work/wp-login.php'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
}
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)
print(type(session.cookies))
# 打印cookies的類型,session.cookies就是登陸的cookies
print(session.cookies)
# 打印cookies
複製代碼
把cookies保存成txt文件的代碼
import requests
import json
# 引入requests和json模塊。
session = requests.session()
url = ' https://wordpress-edu-3autumn.localprod.forc.work/wp-login.php'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
}
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)
cookies_dict = requests.utils.dict_from_cookiejar(session.cookies)
# 把cookies轉化成字典。
print(cookies_dict)
# 打印cookies_dict
cookies_str = json.dumps(cookies_dict)
# 調用json模塊的dumps函數,把cookies從字典再轉成字符串。
print(cookies_str)
# 打印cookies_str
f = open('cookies.txt', 'w')
# 建立名爲cookies.txt的文件,以寫入模式寫入內容。
f.write(cookies_str)
# 把已經轉成字符串的cookies寫入文件。
f.close()
# 關閉文件。
複製代碼
讀取cookies
字符串==>字典==>cookies
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原本的格式。
session.cookies = cookies
#獲取cookies:就是調用requests對象(session)的cookies屬性。
複製代碼
完整版代碼
import requests
import 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原本的格式。
session.cookies = cookies
# 獲取cookies:就是調用requests對象(session)的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': '13',
'comment_parent': '0'
}
# 評論的參數。
comment = session.post(url_1, headers=headers, data=data_1)
# 在建立的session下用post發起評論請求,放入參數:文章網址,請求頭和評論參數,並賦值給comment。
print(comment.status_code)
# 打印comment的狀態碼
複製代碼
加上cookies過時判斷, 封裝成函數
import requests
import 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'
}
def cookies_read():
''' cookies讀取 '''
cookies_txt = open('cookies.txt', 'r')
cookies_dict = json.loads(cookies_txt.read())
cookies = requests.utils.cookiejar_from_dict(cookies_dict)
return (cookies)
def save_cookies():
''' 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)
cookies_dict = requests.utils.dict_from_cookiejar(session.cookies)
cookies_str = json.dumps(cookies_dict)
f = open('cookies.txt', 'w')
f.write(cookies_str)
f.close()
def publish_comment():
''' 發表評論 '''
url_2 = 'https://wordpress-edu-3autumn.localprod.forc.work/wp-comments-post.php'
data_2 = {
'comment': input('請輸入你要發表的評論:'),
'submit': '發表評論',
'comment_post_ID': '13',
'comment_parent': '0'
}
return (session.post(url_2, headers=headers, data=data_2))
try:
session.cookies = cookies_read()
except FileNotFoundError:
save_cookies()
session.cookies = cookies_read()
num = publish_comment()
# 判斷cookies是否過時, 返回200說明沒有過時
if num.status_code == 200:
print('成功啦!')
else:
save_cookies()
session.cookies = cookies_read()
num = publish_comment()
複製代碼
貓哥教你寫爬蟲 000--開篇.md
貓哥教你寫爬蟲 001--print()函數和變量.md
貓哥教你寫爬蟲 002--做業-打印皮卡丘.md
貓哥教你寫爬蟲 003--數據類型轉換.md
貓哥教你寫爬蟲 004--數據類型轉換-小練習.md
貓哥教你寫爬蟲 005--數據類型轉換-小做業.md
貓哥教你寫爬蟲 006--條件判斷和條件嵌套.md
貓哥教你寫爬蟲 007--條件判斷和條件嵌套-小做業.md
貓哥教你寫爬蟲 008--input()函數.md
貓哥教你寫爬蟲 009--input()函數-人工智能小愛同窗.md
貓哥教你寫爬蟲 010--列表,字典,循環.md
貓哥教你寫爬蟲 011--列表,字典,循環-小做業.md
貓哥教你寫爬蟲 012--布爾值和四種語句.md
貓哥教你寫爬蟲 013--布爾值和四種語句-小做業.md
貓哥教你寫爬蟲 014--pk小遊戲.md
貓哥教你寫爬蟲 015--pk小遊戲(全新改版).md
貓哥教你寫爬蟲 016--函數.md
貓哥教你寫爬蟲 017--函數-小做業.md
貓哥教你寫爬蟲 018--debug.md
貓哥教你寫爬蟲 019--debug-做業.md
貓哥教你寫爬蟲 020--類與對象(上).md
貓哥教你寫爬蟲 021--類與對象(上)-做業.md
貓哥教你寫爬蟲 022--類與對象(下).md
貓哥教你寫爬蟲 023--類與對象(下)-做業.md
貓哥教你寫爬蟲 024--編碼&&解碼.md
貓哥教你寫爬蟲 025--編碼&&解碼-小做業.md
貓哥教你寫爬蟲 026--模塊.md
貓哥教你寫爬蟲 027--模塊介紹.md
貓哥教你寫爬蟲 028--模塊介紹-小做業-廣告牌.md
貓哥教你寫爬蟲 029--爬蟲初探-requests.md
貓哥教你寫爬蟲 030--爬蟲初探-requests-做業.md
貓哥教你寫爬蟲 031--爬蟲基礎-html.md
貓哥教你寫爬蟲 032--爬蟲初體驗-BeautifulSoup.md
貓哥教你寫爬蟲 033--爬蟲初體驗-BeautifulSoup-做業.md
貓哥教你寫爬蟲 034--爬蟲-BeautifulSoup實踐.md
貓哥教你寫爬蟲 035--爬蟲-BeautifulSoup實踐-做業-電影top250.md
貓哥教你寫爬蟲 036--爬蟲-BeautifulSoup實踐-做業-電影top250-做業解析.md
貓哥教你寫爬蟲 037--爬蟲-寶寶要聽歌.md
貓哥教你寫爬蟲 038--帶參數請求.md
貓哥教你寫爬蟲 039--存儲數據.md
貓哥教你寫爬蟲 040--存儲數據-做業.md
貓哥教你寫爬蟲 041--模擬登陸-cookie.md
貓哥教你寫爬蟲 042--session的用法.md
貓哥教你寫爬蟲 043--模擬瀏覽器.md
貓哥教你寫爬蟲 044--模擬瀏覽器-做業.md
貓哥教你寫爬蟲 045--協程.md
貓哥教你寫爬蟲 046--協程-實踐-吃什麼不會胖.md
貓哥教你寫爬蟲 047--scrapy框架.md
貓哥教你寫爬蟲 048--爬蟲和反爬蟲.md
貓哥教你寫爬蟲 049--完結撒花.mdphp