02還真來了。
上次用了Requests和BeautifulSoup成功把文章列表頁的資訊爬下來了,欸但是只爬一頁是哪招,只爬一頁的爬蟲比我用手去複製還要沒效率啊,所以接下來就來研究如何爬下一頁。
前情提要:Python爬蟲練習日記 01 – 簡易PTT爬蟲(Requests + BeautifulSoup)
因為上次碰到換頁這問題,去公司騷擾同事後得到了Selenium這個關鍵字,稍微上網了解了一下,Selenium是一個本來是用來測試,然後莫名其妙大家都拿來寫爬蟲的好用工具,主要是可以操作瀏覽器,把一些操作行為給自動化,那不就是按鍵精靈嗎?
加上前陣子聊到了高鐵都搶不到票的問題,看到了Selenium之後,我有了個大膽的想法,不過這個以後有空再說。(其實沒有很大膽)
進入正題,我們先看一下上次的圖
根據PTT網頁版的規則,如果我們要爬到下一頁,就要去按「‹ 上頁」,然而因為上頁的HTML找不到啥特徵可以抓他,所以就用文字來判斷,看到「‹ 上頁」可以按,去按他就對了。
先把selenium拉進來,並且使用webdriver(控制瀏覽器),接著有個地方我搞了一陣子,就是我們會需要先去下載Chrome的driver,然後把路徑填進去。卡住的原因是因為我放在專案目錄底下,不論是用相對路徑,還是絕對路徑的方式,他就是找不到,我的資料夾外面有幾層有中文也有符號,所以絕對路徑失敗可以理解,但相對路徑真的不知道是衝三碗豬腳。
後來我把chromedriver丟在桌面(路徑名稱都正常),就抓得到了,所以我猜應該是真的路徑名稱太多奇怪字符。
from selenium import webdriver
url = 'https://www.ptt.cc/bbs/joke/index.html'
browser = webdriver.Chrome('/Users/optimurmur/Desktop/chromedriver')
browser.get(url)
接下來就是用.click()來進行點擊,寫在迴圈裡面就可以一直點了。
browser.find_element_by_link_text('‹ 上頁').click()
其他找尋元素的方式參考:
- find_element_by_id
- find_element_by_name
- find_element_by_xpath
- find_element_by_link_text
- find_element_by_partial_link_text
- find_element_by_tag_name
- find_element_by_class_name
- find_element_by_css_selector
更多尋找元素的資訊:Locating Elements
大概就是這樣,接下來應該要來爬內文了。