Selenium 是什麼?用 Python Selenium 網路爬蟲自動蒐集資料,提升工作效率必學!
如果你是個投資達人,每天要關注很多財經新聞;或者你是個房地產或股市專家,每天要獲取即時的房價、股市...狀況,我相信每天做重複動作查找資訊對你來說一定很煩。
更別提資訊來源網站很多,要一一打開簡直『煩死了』!😫
所以,需要一個自動化工具來幫你做這些重複的事,而用 Python 程式碼寫一個網路爬蟲自動從網站蒐集資料不失為一個好方法,大大簡化提取過程。
許多企業也利用爬蟲擷取對手的公開資訊,比如知名大零售商沃爾瑪(Walmart)很依賴它來掃描競爭對手的網站,及時調整自己的商品價格,因為小小 50 美分的差價就極可能導致失去一筆訂單。
爬蟲是 Python 最擅長也最初階的練習功能之一。
如果你完全是個程式新手,別擔心,Python 有非常多功能強大的函式庫或套件可以方便使用,本文將介紹其中最常用的一個 – Selenium。
Selenium 是什麼?
Selenium 是用於自動化 Web 瀏覽器的工具,可以協助測試人員做自動化測試,也是可以抓網頁內容的動態網頁爬蟲,常搭配 BeautifulSoup 解析 HTML 網頁原始碼。
Selenium 的主要 2 大應用
自動化測試
Selenium 自動化測試框架主要用作「網頁測試」,可以直接驅動瀏覽器,模擬真正的使用者操作網站,包含打開瀏覽器、點擊或連結、輸入文字、取得網頁內容或內容比對驗證等,滿足許多測試需求。
當一個系統程式非常龐大且複雜,所有測試環節都需要由測試人員層層手動驗證時,很容易因測試人員不同、測試步驟疏漏,間接或直接導致測試的驗證內容有誤或不一致。但 Selenium 的自動化框架能輕鬆達到自動化測試,消除人為因素的錯誤,節省測試手動驗證時間,大幅提升測試內容的準確度和一致性。
網頁抓取 (Web Scraping)
網頁抓取,或白話一點稱作「網路爬蟲」,顧名思義就是用來自動提取網頁內容的應用程式,並把這些內容轉換成容易理解的格式呈現出來。
你可能疑惑,要抓網頁裡面的文字或圖片不是直接複製貼上或截圖就好了嗎?但抓 1 筆容易,抓 100 甚至 1000 筆呢?想想就覺得心累!😩
所以,需要一個程式或可以說一個機器人自動做這些重複又耗時的事情。
在 Python 中,最簡易又陽春的爬蟲是直接用 Requests 套件把整個 HTML 網頁抓下來再解析,但遇到一些很難爬的網站(例如 Google arts & culture),很難直接用 Requests 攻破。
而 Selenium 利用瀏覽器執行 JavaScript,不需要不斷測試攻破點,不過它的缺點是很慢。
【補充】:JavaScript 是大多網站用來開發的一種程式語言,被現今主流瀏覽器(Chrome、IE、Firefox、Safari …)支援。
Selenium 支援的環境 & 工具包操作
Selenium 支援的運作環境
- 作業系統:Microsoft Windows、macOS、Linux ...
- 瀏覽器:Chrome、Firefox、Microsoft Edge、IE、Safari、Opera ...
- 程式語言:Python、Java、JavaScript、C#、Ruby、Kotlin ...
【補充】:如果遇到任何問題或想建議增加什麼功能在未來的版本,都可以隨時到 Selenium 的 GitHub 回報。(點我到 Selenium 的 GitHub Issues Page)
3 個 Selenium 主要的工具包
目前有:Selenium WebDriver、Selenium IDE、Selenium Grid。(點我到官網下載工具包)
(1) Selenium WebDriver
WebDriver 是用來控制 Web 瀏覽器的行為,Selenium 支援的每一個瀏覽器都有各自相對應的驅動程式(driver)。
利用 driver 可使瀏覽器自動化操作,就像有個機器人模擬真正的使用者在操作一樣。
各個瀏覽器的 WebDriver 為:
- Google Chrome : chromedriver
- Mozilla Firefox : geckodriver
- Microsoft Edge : Microsoft Edge Driver/Microsoft WebDriver
- Internet Explorer 11 : IEDriverServer
- Safari : safaridriver
- Opera : operachromiumdriver
(2) Selenium IDE
Selenium IDE (Selenium Integrated Development Environment) 提供記錄和回放 Web 自動化測試,它可以說是 Selenium 的入門學習工具,即使不會寫程式碼,也能用錄製的方法建立自動化測試。
IDE 是一種輔助程式開發的應用軟體,可快速建立腳本(script);也是一種輔助軟體測試的應用軟體,在工具內部就能輔助編寫程式碼,並編譯打包成可執行的程式。Selenium IDE 是 open source,可以下載 Chrome 和 Firefox 的擴充套件,快速安裝並使用。(Chrome 版本下載請點我 / Firefox 版本下載請點我)
若單純測試 Web 文字、畫面元素與流程是否正常,可直接使用 Selenium IDE 做自動化測試。但複雜的測試,比如需前置資料準備動作、Data-Driven、驗證資料庫等,得搭配自己寫的程式碼才能完成。
不過,其實我覺得 Katalon Recorder 更好用,操作起來更直覺,相當推薦給初學者。Katalon Recorder 是類似 Selenium IDE 的擴充套件,同樣可以錄製 Web 的操作並回放。(Chrome 擴充工具下載請點我)
(3) Selenium Grid
若想在多台機器上同時啟動多個瀏覽器對 Web 應用程式並行測試,可以使用 Selenium Grid。
運作原理如下圖:
- 先將一台機器作為 Selenium hub,其它台機器(nodes)對 Selenium hub 註冊 Selenium RC。
- 當 client 對 Selenium hub 發出測試請求時,由 Selenium hub 對已註冊的其它機器發出請求,驅使各台機器啟動瀏覽器進行測試。
簡單實作示範:從 Goodinfo! 列印 PDF 報表
本段落將結合 Selenium 的自動化與爬蟲功能做一個簡單的範例,如果你已經是寫程式的能手,可以快速滑過或跳過不看!
想像你是一個熱衷投資股票和 ETF 的專家,每天都要鎖定好幾個股票和 ETF 擷取線圖和其他相關統計資訊,但一個個點開網頁很花時間又單調。
你需要一個小幫手自動幫你統整,所以,想開發一個簡單的小程式。
以下示範從 Goodinfo!台灣股市資訊網抓 ETF – 0050 的報表作為例子,其他股票或 ETF 請自行以此類推,其他網站或用途當然也請自行延伸、舉一反三!
預備事項
- 準備好 Python 開發環境,並安裝 Selenium 函式庫
- 下載 WebDriver
- 下載 Katalon Recorder (前面提到 Selenium IDE 的替代工具 Katalon Recorder 適用於較簡單的操作,用起來較直覺,這裡也利用 Katalon Recorder 來產生 Python 程式碼😄)
設計步驟
ps. 如果你是程式新手,記得撰寫程式的首要任務,是釐清「到底要做什麼」,好好設計流程會讓你事半功倍,也能幫助你訓練邏輯,這是該具備的正確心態!😊
1. 錄製並自動產生程式碼
STEP 1
打開 Katalon Recorder,並新增 case。(可點擊圖片放大比較看的清楚😆)
STEP 2
點擊「Rec.」鍵開始錄製網頁操作步驟。
STEP 3
打開目標網站(Goodinfo!台灣股市資訊網),讓 Katalon Recorder 記錄你的操作,做完後記得回到 Katalon Recorder 點「Stop」結束錄製。
STEP 4
點選「Export」就會把剛剛紀錄的動作自動產生程式碼,節省寫程式的時間。
STEP 5
將所得到的程式碼整理如下:
2. 抓取網頁內容
如果你想抓目標網頁內的某段文字或圖片,可以利用 Selenium 抓出某個段落後,再用 BeautifulSoup 去掉 HTML 語法、萃取內容。
但在這個範例,單純想把關注的股票或 ETF 的報表整合成 PDF 檔,如下圖:(可點擊圖片放大比較看的清楚😁)
所以,只需多做一些 WebDriver 的設定匯出 PDF 檔,程式碼如下:
完整程式碼
想參考這段程式碼,可到 GitHub 複製(連結請點我)。
小提醒:若只想知道怎麼用,可以直接複製貼上程式碼,但若想當一個專業的程式開發工程師,建議還是要多花時間理解這一行行程式碼在幹嘛(可參考此 Stackoverflow 連結)。
3. 設定程式自動執行
如果每天都要做一樣的事情,可設定定時器(scheduler)讓你的小程式每天固定時間自動被執行,最簡單的是直接用作業系統已有的定時器,例如 Windows 的 Task Scheduler。
或者,也有一些別人開發好的小工具可以免費下載,例如 RobotIntern 我就覺得蠻好用的。
3 個使用 Selenium 爬蟲應注意的事項
Selenium 爬蟲速度較慢
由於模擬一般使用者瀏覽網頁的所有習性,因此 Selenium 爬蟲速度會比較慢,同時又仰賴網速、消耗大量 CPU 資源。
當目標網頁改變,程式碼可能要更新
如果你抓的不是自己開發的網站,當網頁架構改變時,你所寫的爬蟲程式碼要跟著修改,否則可能會抓不到內容。
ps. 可以按 F12 鍵審視網頁架構:
有的網站會防爬蟲程式
有些較專業的網站會有防爬蟲機制,比如 Amazon 網站就有,防止 Walmart 或其他競爭者不時來爬自己的網站抓取商品定價 …。
如果想得到這些網站的資料,有些可以讓你申請它們的 API,有的免費有的則要付費,而 API 的好處是不需擔心網頁架構改變程式碼要跟著更新,因為資料格式幾乎都是固定的。
結語
Selenium 非常實用,許多 Web Test Framework 都以 Selenium API 當作基礎,藉此操作網頁表單資料、點選按鈕或連結、取得網頁內容並進行檢驗。
我自己也利用 Selenium 搭配 scheduler 工具定時自動完成相當多工作,大量縮減自己的工時,比如自動撈資料並更新資料庫、自動抓報表並寄給老闆 …。
希望你也能用它來幫自己節省時間、提升工作效率。
如果你想學更多實作,也可以找一些線上課程跟著實際練習:
- Python:
建議一開始不要貪心,選其中一門好好上完、跟著實作練習並完成作業,慢慢進步!😊
希望大家都可以找到最舒服、最適合自己的學習方式,如果有任何學習上的問題,歡迎在下方留言,跟我一起交流與討論喔!
或者,email 寫信與我切磋&分享知識。
Email:jes.igoamazing@gmail.com
如果喜歡我的內容,也歡迎追蹤我的 IG,可以隨時掌握相關新資訊。
留言
張貼留言