小屋創作

日誌2020-06-01 18:11

PTT Beauty 板圖片爬蟲 (下)

作者:Yotsuba

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

這篇文章是 PTT Beauty 板圖片爬蟲 (上) 以及 Session 的延伸閱讀

我會利用 requests 裡面的 Session 物件把上次的程式碼撰寫的更簡潔

程式碼如下 :


import requests
from bs4 import BeautifulSoup


# I am over 18 years old
session = requests.Session()
session.post('https://www.ptt.cc/ask/over18', data = {'from' : '/bbs/Beauty/M.1563888394.A.F76.html', 'yes' : 'yes'})


# Get html
response = session.get('https://www.ptt.cc/bbs/Beauty/M.1563888394.A.F76.html')
soup     = BeautifulSoup(response.text, 'html.parser')


# Get images
div_list = soup.find_all('div', class_ = 'richcontent')
for div in div_list:
    print(div.img.get('src'))


執行結果




其實真正的重點只有前面兩行

首先去創建一個 Session 物件,我寫成 session = requests.Session()

這樣就完成創建了,之後只要是用這個 session 變數去請求的,一律都是「有狀態」


當我使用 POST 時就自動處理好了 cookie,下一次就直接 GET 目標網頁

連想都不用想,後面直接接 Beautiful Soup 的操作

如果你想利用圖片連結做下載,可以使用 Context Managerurlretrieve


談一下 Session 物件的使用時機 ?

有一種網頁,它明明是 GET,但是你直接 GET 卻看不到它

它需要你先 POST 過後再 GET 才看得到的網頁,就可以用 Session 物件處理

而你八成也知道,這種網頁就是用 cookie 在記錄狀態


舉個例子,巴哈姆特首頁的網址是 https://www.gamer.com.tw/

可是為什麼每個人點擊進去,就可以看到自己的勇者造型和個人資訊 ?

從網址分析,看不出任何個人資訊,而且網站是 GET 嗎 ? 也是

答案就是 cookie,因為瀏覽器自動幫你紀錄並且填好了 cookie

所以每個人點擊一模一樣的網址,卻可以看到屬於自己的資料

3

4

LINE 分享

相關創作

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

伊布氾濫報告書

最近邦邦免費抽到好幾張4~5星w

留言

開啟 APP

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

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