首先說一下,為什么要進行會話保持的操作?
requests庫的session會話對象可以跨請求保持某些參數,說白了,就是比如你使用session成功的登錄了某個網站,則在再次使用該session對象請求該網站的其他網頁都會默認使用該session之前使用的cookie等參數。尤其是在保持登陸狀態時運用的最多。在某些網站抓取,或者app抓取時,有的是強制性的需要登陸的,有的是不登陸返回的數據就是假的或者說是不完整的數據,那我們不可能去做到每一次請求都要去登陸一下怎么辦,就需要用到保持會話的功能了,我們可以只登陸一次,然后保持這種狀態去做其他的或者更多的請求。
其次,我們該如何使用會話保持?舉一個事例來說明一下:
#requests.session():維持會話,可以讓我們在跨請求時保存某些參數
import requests
#實例化session
session = requests.session()
#目標url
url = 'https://www.douban.com/accounts/login'
form_data = {
'source': 'index_nav',
'form_email': 'xxx',
'form_password': 'xxx',
'captcha-solution': 'stamp',
'captcha-id': 'b3dssX515MsmNaklBX8uh5Ab:en'
}
#設置請求頭
req_header = {
'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
}
#使用session發起請求
response = session.post(url,headers=req_header,data=form_data)
if response.status_code == 200:
#訪問個人主頁:
url = 'https://www.douban.com/people/175417123/'
response = session.get(url,headers = req_header)
if response.status_code == 200:
with open('douban3.html','w') as file:
file.write(response.text)