各位早安,書接上回我們已經能夠成功抓到整頁的文章標題了,今天我們要來破解 PTT 某些版上的是否已滿18歲頁面了
各位一定很想知道最近的時事八卦吧
但是進入八卦版時會跳出是否已滿18歲的問題
今天我們就要來克服它
要看八卦版首先我們把網址改成八卦版的網址
去複製回來貼上就好
可以看到換成八卦版的網址了
但是奇怪 怎麼啥都沒有
公布答案 答案是被這傢伙
給擋住了
你如果去看它的原始碼 就會發現
根本沒有啥 < div class="title" > 可以給你抓 當然抓不到任何東西
所以我們要想辦法處理掉這傢伙 才能爬取八卦版上的東西
所以我們要來觀察它 按下 F12 就會開啟開發人員工具
找到 Application
按下去
就會看到
按 Cookie 旁的小箭頭再按下面那個
仔細盯著這區看
接著按下 我同意,我已年滿十八歲 (沒滿18的就當作為了學習犧牲吧)
你會發現裡面多出了一個 over18 它的 Value (值)是 1
那根據判斷 它應該就是我們今天的主角了
這時候你重新整理會發現沒有再跳出一次18歲確認
這便是因為你的瀏覽器裡存的 Cookie 告訴網站你已經確認過了
所以只要我們的程式裡也送出這個 Cookie 便可以達到直接進入八卦板內爬取資訊的目的了
首先建立一個變數 headers
headers 是啥呢 就是我們瀏覽器傳給網站的資料
在裡面放入要附加的 cookie 資訊 over18=1
headers = {"cookie" : "over18=1"}
接下來利用 requests.get() 的功能將 headers 一並傳過去
request = requests.get(url,headers = headers)
結果如下
終於繞過18歲守門員成功抓到網頁資訊了
今天的程式碼
import requests
import bs4
url = "https://www.ptt.cc/bbs/Gossiping/index.html"
#抓PTT八卦版的網頁原始碼
headers = {"cookie" : "over18=1"}
#建立headers用來放要附加的cookie
request = requests.get(url,headers = headers)
#將網頁資料利用requests套件GET下來並附上cookie
data = bs4.BeautifulSoup(request.text, "html.parser")
titles = data.find_all("div", class_ = "title")
#解析網頁原始碼
for title in titles:
if title.a != None:
print(title.a.string)
#利用for迴圈印出全部並篩選掉已被刪除的文章
今天我們藉由打敗18歲守門員學習到附加 cookie 的方法
明天我們會學其他東東 敬請期待
參考資料:
https://www.youtube.com/watch?v=BEA7F9ExiPY&list=PL-g0fdC5RMboYEyt6QS2iLb_1m7QcgfHk&index=20
https://ithelp.ithome.com.tw/articles/10220161
我們眼睛看到的世界其實都經過大腦的後製喔
你還相信眼見為憑嗎還是不想再被腦袋戲耍了呢