更新時間:2022-01-24 10:03:45 來源:動力節點 瀏覽2125次
獲取cookie的核心目的無非就是實現登陸,一般來說我們實現請求大致也有兩種方式,第一種是selenium,第二種是包含requests,urllib等的其他類型,那么cookie的獲取也是針對這樣的結構而言的。
1.利用selenium+phantomjs無界面瀏覽器的形式訪問網站,再獲取cookie值:
(當然這里也包括+webdriver)
# 導入模塊
from selenium import webdriver
driver=webdriver.PhantomJS()
url="https://et.xiamenair.com/xiamenair/book/findFlights.action?lang=zh&tripType=0&queryFlightInfo=XMN,PEK,2018-01-15"
driver.get(url)
#接下來注意了,要開始獲取cookie了.
# 獲取cookie列表
cookie_list=driver.get_cookies()#這里主要是使用自帶的get_cookies方法
# 格式化打印cookie
for cookie in cookie_list:
cookie_dict[cookie['name']]=cookie['value']
print(cookie_dict)
有些人說,最后打印的話,為什么還要弄個循環呢,那么我就給你看看cookie的源格式,這也是為什么要取cookie_list的原因
[{‘domain’: ‘.et.xiamenair.com’, ‘expiry’: 1577686388, ‘httpOnly’: False, ‘name’: ‘_dc_gtm_UA-96517318-3’, ‘path’: ‘/’, ‘secure’: False, ‘value’: ‘1’},
{‘domain’: ‘.et.xiamenair.com’, ‘expiry’: 1577772728, ‘httpOnly’: False, ‘name’: ‘_gid’, ‘path’: ‘/’, ‘secure’: False, ‘value’: ‘GA1.3.10695887.1577686328’},
{‘domain’: ‘.et.xiamenair.com’, ‘expiry’: 1640758328, ‘httpOnly’: False, ‘name’: ‘_ga’, ‘path’: ‘/’, ‘secure’: False, ‘value’: ‘GA1.3.346851281.1577686328’},
{‘domain’: ‘et.xiamenair.com’, ‘expiry’: 1593238326.401786, ‘httpOnly’: False, ‘name’: ‘Webtrends’, ‘path’: ‘/’, ‘secure’: False, ‘value’: ‘221.194.139.166.1577686326367810’},
{‘domain’: ‘.et.xiamenair.com’, ‘httpOnly’: False, ‘name’: ‘Hm_lpvt_a0f83bbc1d09b6e5a33928301f402485’, ‘path’: ‘/’, ‘secure’: False, ‘value’: ‘1577686328’},
{‘domain’: ‘.xiamenair.com’, ‘expiry’: 1585462327, ‘httpOnly’: False, ‘name’: ‘_gcl_au’, ‘path’: ‘/’, ‘secure’: False, ‘value’: ‘1.1.1071047259.1577686328’},
{‘domain’: ‘.et.xiamenair.com’, ‘expiry’: 1609222327, ‘httpOnly’: False, ‘name’: ‘Hm_lvt_a0f83bbc1d09b6e5a33928301f402485’, ‘path’: ‘/’, ‘secure’: False, ‘value’: ‘1577686328’},
{‘domain’: ‘et.xiamenair.com’, ‘httpOnly’: False, ‘name’: ‘JSESSIONID’, ‘path’: ‘/xiamenair’, ‘secure’: False, ‘value’: ‘fITPgukOvdHrSaj8Jyo25z+Q.mfb2cServer3’}]
看明白了吧,cookie本來就是這個格式的
就是一個列表,內含n多個字典,字典里面還有各個字段,比如domain,expiry,httpOnly,name,path,secure,value等
第一種咱們看了,接下來看第二種
第二種相對來說要多點,我們根據不同的請求方法來:
但是有一個共同點,基本都是使用cookiejar來做
1.首先來說urllib,我們只針對python3
# python3.6環境
from urllib import request
from http import cookiejar
if __name__ == '__main__':
#1. 聲明一個CookieJar對象實例來保存cookie,先構建一個容器
cookie = cookiejar.CookieJar()
# 2.利用urllib.request庫的HTTPCookieProcessor對象來創建cookie處理器,也就CookieHandler
handler=request.HTTPCookieProcessor(cookie)
# 通過CookieHandler創建opener
opener = request.build_opener(handler)
# 3.此處的open方法打開網頁
response = opener.open('http://www.baidu.com')
# 打印cookie信息
for item in cookie:
print('Name = %s' % item.name)
print('Value = %s' % item.value)
有人會說,如果我想看cookie的具體東西,我沒打印的情況下,我怎么知道cookie的屬性有哪些,這確實,說的沒毛病,那么我再來一招:
以上面為例,cookiejar獲取的其實是一個對象列表,列表可以遍歷,但是對象不可以遍歷,那怎么辦呢?
for i in cookie:
print(“我是k”, i.dict.items())
這樣來,我們對cookiejar進行遍歷,得到對象i,那么再對對象i進行字典化的讀取,就可以了
2.再來,我們再來說說requests請求方式:
一般攜帶Cookie請求有三種方式:
三種Cookie請求方式
第一種:cookie放在headers中
首先找到登陸之后的Cookie和User-Agent,然后將User-Agent和Cookie復制到程序里面,如下:
import requests
url = "https://blog.csdn.net/williamgavin"
headers = {"User_Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36",
"Cookie" : "這個還是算了吧,用你們自己的博客試 ^-^ "
}
response = requests.get(url, headers = headers )
with open("csdn.html", "w", encoding="utf-8") as f:
f.write(response.content.decode());
第二種:cookie字典傳給cookies參數
這里以請求人人網為例:
找到對應的cookie和User-Agent
import requests
url = "http://www.renren.com/967272361/profile"
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36",
}
# 不帶上Cookie就訪問不了這個頁面
cookie = "anonymid=jk63khrk-y97r4p; _r01_=1; [email protected]; ln_hurl=http://hdn.xnimg.cn/photos/hdn421/20180720/1740/main_JAWQ_0aa000000ceb195a.jpg; _ga=GA1.2.273332130.1532825428; depovince=HUN; JSESSIONID=abcE5k0CiAJDc9ESVEcuw; ick_login=026ba348-e4e9-4871-9ce3-5868b95cfdd3; first_login_flag=1; loginfrom=syshome; wp_fold=0; BAIDU_SSP_lcr=https://www.baidu.com/link?url=VRx_HKUd53I5rYWZHvrQ9VVLotqST6-jtaZDlscFYCO&wd=&eqid=e957aec400037928000000065b64fcab; ick=64518f30-9a22-47df-b3c3-4114f185c3c6; t=8fcf47068763c279eea2620b51b7a3311; societyguester=8fcf47068763c279eea2620b51b7a3311; id=967272361; xnsid=fd736c63; jebecookies=3f9a3853-3371-4857-8268-308d663ca146|||||; jebe_key=19041c4e-4d38-4dc1-bfb9-124b81afae61%7C33b1d8f602cf6dd5a9834fe6f2bf97f2%7C1533346094265%7C1%7C1533346099750"
# 將上面哪個cookie轉化成字典類型
cookie_dict = {i.split("=")[0]:i.split("=")[-1] for i in cookie.split("; ")}
response = requests.get(url, headers = headers, cookies = cookie_dict)
with open("renren2.html", "w", encoding="utf-8") as f:
f.write(response.content.decode())
第三種 先發送post請求,獲取cookie,帶上cookie請求登陸之后的頁面
具有保持功能, 就類似瀏覽器輸入一次密碼之后,會自動保留cookie
seesion = requests.seesion()
seesion.post(url, data, headers) # 服務器設置在本地的cookie會保存在本地
seesion.get(url) # 會帶上之前保存在seesion中的cookie,能夠請求成功
以上就是關于“兩種方法可以讀取Cookie”的介紹,大家如果想了解更多相關知識,可以關注一下動力節點的Cookie的工作原理,課程內容細致全面,通俗易懂,適合小白學習,希望對大家能夠有所幫助。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習