小屋創作

日誌2020-06-01 18:10

PTT Beauty 板圖片爬蟲 (上)

作者:Yotsuba

請你先點擊這個連結 : https://www.ptt.cc/bbs/Beauty/M.1563888394.A.F76.html

這個連結會通往 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 的各種操作取的圖片連結並且下載了

可以參考看看延伸閱讀,下篇文章會教你使用更簡潔的方式撰寫程式碼


延伸閱讀 : PTT Beauty 板圖片爬蟲 (下)

3

2

LINE 分享

相關創作

近況報告及新自創卡介紹

雲聊閒聊•雜七雜八。【162】

基礎&造型。 0502 道中 (上班趕進度喵

留言

開啟 APP

face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】