日誌2020-06-01 18:11
PTT Beauty 板圖片爬蟲 (下)作者:Yotsuba
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')) |
2020-06-01 23:57Yotsuba:的確是,因為第一個 POST 的回應其實是 302 (會重導向)
requests 的 allow_redirects 預設也是 True,算是多此一舉了
撰寫的時候沒有注意到,感謝回覆 !
2020-06-02 08:42Yotsuba:以你這樣的寫法會讓 Session 失效
因為每一次使用完,那塊物件就自動釋放掉了
不過如果你今天是寫其他東西或許可以這麼做
比如說我要調用 Math 物件裡面的 pow 函式就可以寫 z = Math.Pow(x, y) 之類的
(我亂舉例的)
那種 "我單純想要用這個物件的函式" 就可以寫成一行流
但像 Session 這種物件中有變數需要持續使用的就不行
因為我們就是希望這塊記憶體被保留
2020-06-02 08:46Yotsuba:以流程來說,session.post 是代表點擊我同意這件事情,並且記錄下來
接著用 session.get 就可以正常瀏覽頁面了,因為我們點擊我同意了
可是為什麼樓上會提到不用後面的 get ?
因為實際上那個 POST 重導向了 XD,直接引導我們到後面要 GET 的網址了
以你瀏覽器看到的畫面其實也一模一樣
你是不是點擊了我同意,就跳轉到 Reol 那篇文章的頁面了呢 ?
重導向的部分,我會在寫一篇文章介紹