跳到主要內容

【Google Colab系列】該如何設計自己的爬蟲來抓取Html資料?

 上一篇我們已經介紹過Google Colab的基本用法,建議可以先行閱讀「【Google Colab系列】台股分析預備式: Colab平台與Python如何擦出火花?」,進行基本概念與環境的建置再進行下一步會比較容易進行學習。

雖然網路上已經提供非常多的股市資訊,但各個網站可能都零零散散,難免我們得自行進行資訊整合來抓取網頁資料進行分析,而Python語言的特性就是早期具有非常多的資料科學家使用的一門語言,故統計、分析、資料解析的套件非常多,我們只要採用幾個重要的套件就能夠快速的抓取我們需要的資料進行分析。

這次主要介紹兩個重要的套件,分別是「BeautifulSoap」與「Pandas」,這兩個工具主要瞄準的目標不太相同,「BeautifulSoap」主要針對HTML、XML格式進行解析,讓我們可以更快的抓到我們需要的資料,等於是幫我們進行第一道關卡的過濾,而第二道關卡資料分析的過程就需要透過「Pandas」來幫我們進行了,就相當於資料 → 資訊 → 知識的轉化過程。

撒網目標: Goodinfo!

- https://goodinfo.tw/tw/index.asp

- 某一檔個股的經營績效指標。

我們已經很確定要抓取的網頁資訊就是在「經營績效」這個頁面,因此第一步就是先進到這個畫面之後,將網址複製起來。

我們得到網址之後,首先就要先設法將網頁內容抓取,我們可以用Python內建的request套件去請求目標網址。

import requests

res = requests.get('https://goodinfo.tw/tw/StockBzPerformance.asp?STOCK_ID=3231', headers = headers)

res.encoding = 'utf-8'

res.text

但非常不幸的第一步將遇到一個狀況就是我們被誤以為機器人,因此沒辦法請求任何資訊了!

怎麼辦呢? 主要是許多網站都會檢查header是否為user-agent來判定為機器人或者瀏覽器行為,此時我們來觀察一下瀏覽器操作的行為,並試圖模擬一下。

回到頁面,我們按下F12打開瀏覽器開發者工具列,切到Network,接著按下頁面重新整理之後,蒐集目前頁面網路傳輸資訊。

接著在Headers裡面找到user-agent欄位並複製起來。

接著我們回到Colab進行程式開發,將headers帶入。

headers = {

'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'

}

res = requests.get('https://goodinfo.tw/tw/StockBzPerformance.asp?STOCK_ID=3231', headers = headers)

此時執行後我們就能夠成功抓到內容囉!

網頁解析的利器: BeautifulSoap

首先我們一樣開始F12開發者工具,並且點選左下角的「Select an element…」來獲取指定區塊,今天我們抓取的目標是獲利指標,因此就將滑鼠移到該區塊。

接著我們回到Colab撰寫程式抓取目標值。

from bs4 import BeautifulSoup

bs = BeautifulSoup(res.text, 'html.parser')

data = bs.select_one('#tblDetail')

成功抓到區塊資料如下:

資料分析的利器: Pandas

成功抓取資料之後,由於我們的目標區塊是表格,而Pandas正好非常擅長處理表格資料,因此我們可以將目標資料丟給Pandas進行分析處理。

import pandas

dfs = pandas.read_html(data.prettify())

node = dfs[0]

print(node)

成功抓取目標節點。

接著我們可以透過.head()的方式來瀏覽資料集。

下一個章節我們再來介紹如何取得我們要的EPS、殖利率…等關鍵指標進行程式運算,看到此篇文章的你不妨動手試試看,相信成功之後會非常有成就感,才能有信心往下一道關卡邁進。

結語

Python不愧是進行資料分析的最佳利器,簡單的透過幾個套件就能夠快取爬取我們要的網站資料,並且進一步進行資料統計與分析,難怪資料科學家們都喜愛這套程式語言,我們也要跟上趨勢學習如何抓取、過濾、分析資料,善用各式工具幫助我們提升效率。

為什麼會拿來分析股市資訊呢? 起心動念主要源自於市面上太多各式各樣的APP,但這些APP都有一些共同點,就是進階功能皆需收費,對於小資族來說也是一筆不小的負擔啊! 因此我們既然已經有工具及觀念,何不自行打造專屬的資料分析器呢?

今天的範例都在這裡「📦 goodinfo_example.ipynb」歡迎自行取用。

喜歡撰寫文章的你,不妨來了解一下:

Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 - 為什麼要加入?

歡迎加入一起練習寫作,賺取知識,累積財富!

留言

這個網誌中的熱門文章

java西元民國轉換_各種不同格式

C#資料庫操作(新增、修改、刪除、查詢)

【Excel好好玩】 自己的資產自己管!善用Google Sheet來幫我們評估貸款

這次介紹的主題是關於Excel的貸款還款計畫試算,我們人生中總會遇到需要大筆金額的花費,但當資金不夠時就得進行貸款,而貸款之前如果我們能夠審慎評估,並分析自己的還款能力之後在進行凍作,相信風險會小很多,因此就自己動動手來使用Google Sheet進行試算吧! 基本資料 ● 貸款總額: 1000000 ● 貸款期數: 84月 ● 年利率: 2.11% ● 月利率: 0.18% P.S 月利率 = 年利率 / 12 重要函式 PMT : 這是Google Sheet內建的重要年金計算公式,我們可以善用這個公式來計算固定利率及期數的固定攤還本息。因為PMT函式計算出的結果為負數,所以前面加上-號轉成正數。 動手做 首先我們在Excel表上列出我們的基本資料 圖片來源 其中月利率的部分就使用公式「=B4/12」 接著我們填上第一列的期數跟餘額 圖片來源 =B2 =B3 使用關鍵PMT函數來計算本息的部分 因為PMT函式計算出的結果為負數,所以前面加上-號轉成正數。 -PMT(貸款利率(月利率), 貸款期數, 貸款總額) =-PMT($B$5,$B$3,$B$2) 圖片來源 計算利息 利息 = 貸款餘額 x 月利率 =B8*$B$5 圖片來源 計算本金 本金 = 本息 - 利息 =C8-D8 圖片來源 製作第二列餘額的部分 餘額的部分 = 上一期的餘額 - 上一期的本金 圖片來源 接著拖曳該兩列往下拉,即可查看每一期的利息與本金 圖片來源 結語 雖然市面上已經有很多貸款銀行都提供了試算功能,但如果我們想要進一步管理自己的資產時,就需要將每一期的金額給計算出來,因此才會將公式運用在Excel表,讓我們的資產管理表能夠結合負債,進一步評估我們理財行動的下一步,希望這樣的經驗可以幫助到正在理財道路上打拼的夥伴,讓我們透過有效的管理,幫助荷包長大吧! 喜歡撰寫文章的你,不妨來了解一下: Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 — 為什麼要加入? 歡迎加入一起練習寫作,賺取知識,累積財富!