Selenium 是什麼?用 Python Selenium 網路爬蟲自動蒐集資料,提升工作效率必學!

Selenium 是什麼?用 Python Selenium 網路爬蟲自動蒐集資料,提升工作效率必學!


如果你是個投資達人,每天要關注很多財經新聞;或者你是個房地產或股市專家,每天要獲取即時的房價、股市...狀況,我相信每天做重複動作查找資訊對你來說一定很煩。

更別提資訊來源網站很多,要一一打開簡直『煩死了』!😫

所以,需要一個自動化工具來幫你做這些重複的事,而用 Python 程式碼寫一個網路爬蟲自動從網站蒐集資料不失為一個好方法,大大簡化提取過程。

許多企業也利用爬蟲擷取對手的公開資訊,比如知名大零售商沃爾瑪(Walmart)很依賴它來掃描競爭對手的網站,及時調整自己的商品價格,因為小小 50 美分的差價就極可能導致失去一筆訂單。

爬蟲是 Python 最擅長也最初階的練習功能之一。

如果你完全是個程式新手,別擔心,Python 有非常多功能強大的函式庫或套件可以方便使用,本文將介紹其中最常用的一個 – Selenium




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#RubyKotlin ...

【補充】:如果遇到任何問題或想建議增加什麼功能在未來的版本,都可以隨時到 Selenium 的 GitHub 回報。(點我到 Selenium 的 GitHub Issues Page)



3 個 Selenium 主要的工具包

目前有:Selenium WebDriver、Selenium IDE、Selenium Grid。(點我到官網下載工具包)

Selenium工具包

(1) Selenium WebDriver

WebDriver 是用來控制 Web 瀏覽器的行為,Selenium 支援的每一個瀏覽器都有各自相對應的驅動程式(driver)。

利用 driver 可使瀏覽器自動化操作,就像有個機器人模擬真正的使用者在操作一樣。

各個瀏覽器的 WebDriver 為:


(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 Grid 組成
  1. 先將一台機器作為 Selenium hub,其它台機器(nodes)對 Selenium hub 註冊 Selenium RC。
  2. 當 client 對 Selenium hub 發出測試請求時,由 Selenium hub 對已註冊的其它機器發出請求,驅使各台機器啟動瀏覽器進行測試。



簡單實作示範:從 Goodinfo! 列印 PDF 報表

本段落將結合 Selenium 的自動化與爬蟲功能做一個簡單的範例,如果你已經是寫程式的能手,可以快速滑過或跳過不看!

想像你是一個熱衷投資股票和 ETF 的專家,每天都要鎖定好幾個股票和 ETF 擷取線圖和其他相關統計資訊,但一個個點開網頁很花時間又單調。

你需要一個小幫手自動幫你統整,所以,想開發一個簡單的小程式。

以下示範從 Goodinfo!台灣股市資訊網抓 ETF – 0050 的報表作為例子,其他股票或 ETF 請自行以此類推,其他網站或用途當然也請自行延伸、舉一反三!



預備事項

  1. 準備好 Python 開發環境,並安裝 Selenium 函式庫
  2. 下載 WebDriver
  3. 下載 Katalon Recorder (前面提到 Selenium IDE 的替代工具 Katalon Recorder 適用於較簡單的操作,用起來較直覺,這裡也利用 Katalon Recorder 來產生 Python 程式碼😄)



設計步驟

  1. 錄製並自動產生程式碼
  2. 抓取網頁內容
  3. 設定程式自動執行
程式設計步驟

ps. 如果你是程式新手,記得撰寫程式的首要任務,是釐清「到底要做什麼」,好好設計流程會讓你事半功倍,也能幫助你訓練邏輯,這是該具備的正確心態!😊



1. 錄製並自動產生程式碼

STEP 1

打開 Katalon Recorder,並新增 case。(可點擊圖片放大比較看的清楚😆)

Katalon Recorder steps

STEP 2

點擊「Rec.」鍵開始錄製網頁操作步驟。

Katalon Recorder Rec

STEP 3

打開目標網站(Goodinfo!台灣股市資訊網),讓 Katalon Recorder 記錄你的操作,做完後記得回到 Katalon Recorder 點「Stop」結束錄製。

Goodinfo範例

STEP 4

點選「Export」就會把剛剛紀錄的動作自動產生程式碼,節省寫程式的時間。

Katalon Recorder 記錄

可以選擇想產生的程式碼,比如 C#、Java、Python、XML ……。
Katalon Recorder steps

STEP 5

將所得到的程式碼整理如下:

Selenium Python 程式碼


2. 抓取網頁內容

如果你想抓目標網頁內的某段文字或圖片,可以利用 Selenium 抓出某個段落後,再用 BeautifulSoup 去掉 HTML 語法、萃取內容。

但在這個範例,單純想把關注的股票或 ETF 的報表整合成 PDF 檔,如下圖:(可點擊圖片放大比較看的清楚😁)

Selenium print

所以,只需多做一些 WebDriver 的設定匯出 PDF 檔,程式碼如下:

Selenium Python 程式碼列印

完整程式碼

Selenium Python 程式碼示範

想參考這段程式碼,可到 GitHub 複製(連結請點我)。

小提醒:若只想知道怎麼用,可以直接複製貼上程式碼,但若想當一個專業的程式開發工程師,建議還是要多花時間理解這一行行程式碼在幹嘛(可參考此 Stackoverflow 連結)。



3. 設定程式自動執行

如果每天都要做一樣的事情,可設定定時器(scheduler)讓你的小程式每天固定時間自動被執行,最簡單的是直接用作業系統已有的定時器,例如 Windows 的 Task Scheduler。

或者,也有一些別人開發好的小工具可以免費下載,例如 RobotIntern 我就覺得蠻好用的。




3 個使用 Selenium 爬蟲應注意的事項

Selenium 爬蟲速度較慢

由於模擬一般使用者瀏覽網頁的所有習性,因此 Selenium 爬蟲速度會比較慢,同時又仰賴網速、消耗大量 CPU 資源。



當目標網頁改變,程式碼可能要更新

如果你抓的不是自己開發的網站,當網頁架構改變時,你所寫的爬蟲程式碼要跟著修改,否則可能會抓不到內容。

ps. 可以按 F12 鍵審視網頁架構:

Goodinfo範例區塊


有的網站會防爬蟲程式

有些較專業的網站會有防爬蟲機制,比如 Amazon 網站就有,防止 Walmart 或其他競爭者不時來爬自己的網站抓取商品定價 …。

如果想得到這些網站的資料,有些可以讓你申請它們的 API,有的免費有的則要付費,而 API 的好處是不需擔心網頁架構改變程式碼要跟著更新,因為資料格式幾乎都是固定的




結語

Selenium 非常實用,許多 Web Test Framework 都以 Selenium API 當作基礎,藉此操作網頁表單資料、點選按鈕或連結、取得網頁內容並進行檢驗。

我自己也利用 Selenium 搭配 scheduler 工具定時自動完成相當多工作,大量縮減自己的工時,比如自動撈資料並更新資料庫、自動抓報表並寄給老闆 …。

希望你也能用它來幫自己節省時間、提升工作效率。

如果你想學更多實作,也可以找一些線上課程跟著實際練習:

建議一開始不要貪心,選其中一門好好上完、跟著實作練習並完成作業,慢慢進步!😊

希望大家都可以找到最舒服、最適合自己的學習方式,如果有任何學習上的問題,歡迎在下方留言,跟我一起交流與討論喔!


或者,email 寫信與我切磋&分享知識。

Email:jes.igoamazing@gmail.com


如果喜歡我的內容,也歡迎追蹤我的 IG,可以隨時掌握相關新資訊。

JESLYN_COOL

IG:https://www.instagram.com/jeslyn_cool/








留言

熱門文章

想自學 Python 卻不知從何下手?10 個推薦給初學者的 YouTube 頻道

Plotly 好用嗎?資料視覺化與可互動圖表的必備利器,新手必學 Python Plotly 懶人包

Python 是什麼?Python 可以做什麼?新手必看 Python 入門懶人包