Python爬蟲練習日記 02 – 爬蟲換頁(Selenium)

02還真來了。

上次用了Requests和BeautifulSoup成功把文章列表頁的資訊爬下來了,欸但是只爬一頁是哪招,只爬一頁的爬蟲比我用手去複製還要沒效率啊,所以接下來就來研究如何爬下一頁。

前情提要:Python爬蟲練習日記 01 – 簡易PTT爬蟲(Requests + BeautifulSoup)

因為上次碰到換頁這問題,去公司騷擾同事後得到了Selenium這個關鍵字,稍微上網了解了一下,Selenium是一個本來是用來測試,然後莫名其妙大家都拿來寫爬蟲的好用工具,主要是可以操作瀏覽器,把一些操作行為給自動化,那不就是按鍵精靈嗎?

加上前陣子聊到了高鐵都搶不到票的問題,看到了Selenium之後,我有了個大膽的想法,不過這個以後有空再說。(其實沒有很大膽)

你剛說第一個願望是要爬什麼!?
ptt joke板

進入正題,我們先看一下上次的圖

根據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
大概就是這樣,接下來應該要來爬內文了。