這個連結會通往 PTT Beauty 板的一篇關於 Reol 的討論串
我還是先說一下好了,Reol 我婆
沒意外的話,你會先看到這個熟悉的畫面對吧 ?
當你點擊「我同意」的時候肯定送出了一個 POST 表單,接著才能正常瀏覽網頁
我們直接來撈一段封包分析看看
第一張圖讓我注意到了「over18」
而當我點擊「我同意」後馬上彈出了另外一個「over18」的 POST 表單
接著我們就可以正常瀏覽網頁了
我們可以看到 Form Data 裡面有兩個資料
第一個是 /bbs/Beauty/M.1563888394.A.F76.html,第二個是 yes
可見和原本的 https://www.ptt.cc/bbs/Beauty/M.1563888394.A.F76.html 做對比
我們知道 https 是協定,www.ptt.cc 是網域,/bbs/Beauty/M.1563888394.A.F76.html 是目標檔案
而 yes 就代表我們點擊了同意,那點擊不同意大概就是 no 囉
接著我們寫一小段程式碼 :
import requests
response = requests.get('https://www.ptt.cc/bbs/Beauty/M.1563888394.A.F76.html')
print(response.text) |
執行結果
看到 <p> 節點的關鍵字大概就知道了,沒有點擊「我同意」果然不行
能理解點擊「我同意」一定是 POST 行為,但是由誰來記錄我點擊了「我同意」呢 ?
答案就是 cookie,cookie 幫我們紀錄了「我同意」這個狀態
我們再寫一段測試程式碼
import requests
params = {'from' : '/bbs/Beauty/M.1563888394.A.F76.html', 'yes' : 'yes'}
response = requests.post('https://www.ptt.cc/ask/over18', data = params, allow_redirects = False)
cookies = response.cookies
response = requests.get('https://www.ptt.cc/bbs/Beauty/M.1563888394.A.F76.html', cookies = cookies)
print(response.text)
|
執行結果
終於看到一個比較正常的畫面了,確定可以成功請求到我們要的網頁
這邊就先不解釋 allow_redirects 重導向是幹嘛用的 ?
主要是我發現我同意這個 POST 會重導向,還會把 cookie 換掉
所以要先關閉重導向才可以拿到我要的那份 cookie
總之這篇文章展示了一個 cookie 的處理方法,處理掉以後就能成功拿到目標網頁
拿到目標網頁後,就可以使用 Beautiful Soup 的各種操作取的圖片連結並且下載了
可以參考看看延伸閱讀,下篇文章會教你使用更簡潔的方式撰寫程式碼