[Python] 05.cookies


Author

  • Hey Guys We Have A Gift For You! Click On The Following Link To Claim Your Gift.
                                          -- Belion

大家好我是作者彼獅,本文是我 PyETL Notes 的系列文,將使用 Python 進行資料分析的套件一一介紹說明,如果有補充的背景知識或其他資訊會附註在資訊欄提供參考,同時我產出自己的技術文章與學習筆記,相關的內容可以參考文末資訊,本魯尚菜,文章僅供參考,若有錯誤煩請多賜教言亦歡迎留言討論,拜謝其臨。

Intro

  cookies 是我們訪問伺服器時所帶的一個小型文字檔,通常用於識別使用者的資訊,像是我們經常登入某些網站時會勾選的記住我,讓我們下次登入時不用輸入帳號密碼,或者某些網頁要求我們同意 cookies 的綁定才接受訪問,這樣的要求是因為伺服器想要得到我們訪問網頁的軌跡或是從哪裡來,經由這個 cookies 的資料,更方便他們掌握使用者們的購物習慣或是對哪個廣告有興趣,方便行銷或銷售策略規劃之用。
  本文以 PTT 八卦版舉例,由於八卦版設有十八禁的規定,從網頁版 PTT 瀏覽八卦版時,會在進入八卦版之前跳轉到一個是否滿十八歲的跳轉網頁:
十八禁的跳轉網頁
  如果選擇已滿十八歲,則可以正常瀏覽,若否就會跳轉回去,所以爬蟲程式一樣也會在訪問的同時進入到這個十八禁的跳轉網頁,此時我們點擊瀏覽器網址左邊的鎖頭 icon 觀察:
Cookies
over-18
  可以看到我們點擊同意之後,瀏覽器上綁定了名稱為 over18 的 cookie 內容是 1,所以這是一組 Key-Value1 的關係,所以我們可以在請求網頁伺服器同時帶入 cookies 使用 json 的格式來回應 Key-Value 的格式。

cookies = {'over18' : '1'}
res = requests.get(url=url, headers=headers, cookies=cookies)

  我們可以直接在 requests.get 參數中帶入 cookies 的參數,這是 requests 套件支援的好功能,亦可以:

session_requests = requests.session()
session_requests.cookies['over18'] = '1'
res = session_requests.get(url=url, headers=headers)

  我們使用 session method 來將我們的訪問再包裝成一個 session 內容直接可以包含我們所設定的 cookies 內容,接著進行請求就可以成功訪問八卦版。


Code

import requests

url = 'https://www.ptt.cc/bbs/Gossiping/index.html'

useragent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36'
headers = {
    'User-Agent' : useragent
}
cookies = {
    'over18' : '1'
}
session_requests = requests.session()
session_requests.cookies['over18'] = '1'

# 沒帶入 cookie 時無法入版訪問,透過瀏覽器觀察cookie內容,適用於年齡或真值訪問的簡單入口網站。
# 將cookie作為參數帶入get訪問或是將 cookies 先帶入seession於get前先訪問再請求資料亦可。
# res1 = requests.get(url=url, headers=headers)
res2 = requests.get(url=url, headers=headers, cookies=cookies)
res3 = session_requests.get(url=url, headers=headers)
# print(res1.text)
print(res2.text)
print(res3.text)

Other info

Hola guys! 感謝客官您的閱讀,
如果我的文章對您有幫助或有所獲的話,歡迎關注我的 CoderBridge 帳號與 Belion 部落格!


  1. 一個 Key 只會指向到一個 Value 的內容,原則上一個資料庫裡,Key 是不能重名的,一組 Key-Value 的關係是唯一的,但不同 Key 可以儲存相同內容的 Value,而相同內容 Value 的不同 Key 並非指向同一個 Value,而這種儲存資料的方式,我們稱之為 NoSQL 資料庫,不同於關聯式資料庫。

#Python #PyETL #notes







你可能感興趣的文章

用 Nest.js 開發 API 吧 (六) - TypeORM

用 Nest.js 開發 API 吧 (六) - TypeORM

筆記、15 週瀏覽器導讀

筆記、15 週瀏覽器導讀

D61_W8 (1 of 61)

D61_W8 (1 of 61)






Comments