Python爬蟲:Goodinfo的ROE排名

快速從goodinfo獲得巴菲特都愛看的ROE

MinKuan
6 min readAug 3, 2020

前言

今天將會分享如何使用python爬取Goodinfo的各家公司的財務報表。

在開始爬蟲時都要先研究 目標是誰?結構是甚麼?我要什麼資料?希望最後的資料長怎麼樣? 在腦中有些許畫面後,我們就可以開始了!!!

將學習到

  • 使用requests的headers取得goodinfo
  • 用BeautifulSoup整理html
  • 接著用pandas整理出我們要的資訊

環境設定

win10 Anaconda 的 jupyter(6.0.3)

使用套件

import requests
import bs4
import pandas

開始工作

步驟1:檢查目標

我們在開始打程式之前可以先點開該網站並按滑鼠右鍵”檢查”,先快速看過此網站結構。

https://goodinfo.tw/StockInfo/StockList.asp?RPT_TIME=&MARKET_CAT=%E7%86%B1%E9%96%80%E6%8E%92%E8%A1%8C&INDUSTRY_CAT=%E5%96%AE%E5%AD%A3ROE%E6%9C%80%E9%AB%98%40%40%E8%82%A1%E6%9D%B1%E6%AC%8A%E7%9B%8A%E5%A0%B1%E9%85%AC%E7%8E%87+%28ROE%29%40%40%E5%96%AE%E5%AD%A3ROE%E6%9C%80%E9%AB%98

步驟2:使用requests爬取網站並整理

import requests#目標網站。
url = "https://goodinfo.tw/StockInfo/StockList.asp?RPT_TIME=&MARKET_CAT=%E7%86%B1%E9%96%80%E6%8E%92%E8%A1%8C&INDUSTRY_CAT=%E5%96%AE%E5%AD%A3ROE%E6%9C%80%E9%AB%98%40%40%E8%82%A1%E6%9D%B1%E6%AC%8A%E7%9B%8A%E5%A0%B1%E9%85%AC%E7%8E%87+%28ROE%29%40%40%E5%96%AE%E5%AD%A3ROE%E6%9C%80%E9%AB%98"
#設定headers
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'
}
#使用headers讓網站辨識我們是存在的使用者
res = requests.get(url,headers = headers)
#更改資料的字元編碼
res.encoding = 'utf-8'
滑鼠右鍵>檢查>Network>Doc>Headers滑至下方可以看見user-agents

使用headers是為了讓該網站認為我們不是機器人,而每個人的headers會依你所用的瀏覽器或伺服器而有不同。找到user-agents複製下來即可。

在中文的資料中常需要更改字元編碼,而'utf-8''big5'最為使用中文資料時常見的編碼。

步驟3:使用BeautifulSoup解析

import bs4#將取得的網站用'lxml'解析整理
soup = bs4.BeautifulSoup(res.text,'lxml')
#用css的語法找到id = 'txtFinDetailData'
data = soup.select_one('#txtFinDetailData')

bs4的整理解析默認是'html.parser',但其實有”lxml”、”html5lib”、”html.parser”這三種,其中”lxml”的解析速度快、容錯能力強。

selectfind是類似的搜尋方式,而select是採用css語法為基礎做搜尋,其中'#'id屬性。

步驟4:使用pandas整理資料

import pandas as pd#用.prettify()將data整理得更好且用read_html來找到表格
df = pd.read_html(data.prettify())
#看有幾個表格
len(df)
#第[1]表格為我們的目標。
dfs = df[1]
#整理表格的標頭
dfs.columns = dfs.columns.get_level_values(16)
#顯示頭幾筆資料
dfs.head()
dfs.columns.get_level_values(X)(x)是可以依照你的標頭做調整,多是在表頭重複時會用到的整理方式,如上圖。

成果展示

完整程式碼

小結

今天我們藉由goodinfo爬到了我們想要的資料,不用特別去爬取每家公司的財務報表,有了以上的資料更能對基本面去做分析,也可以透過pandas去繪圖找到相對高點和低點,讓資料的閱讀性更高。

goodinfo是個結合很多有關股票股市的資訊好網站,他們不只有針對巴菲特常用的ROE做排名,如果有興趣的朋友可以多多瀏覽這個網站。

如果你對於以上的內容有建議歡迎提出,一起討論絕對是成長的捷徑!!

參考資料

[Day 08] Beautiful Soup 解析HTML元素
[Day23]Beautiful Soup網頁解析!
python爬蟲 — 解析網頁幾種方法之BeautifulSoup
[財經爬蟲] 如何透過Python 網路爬蟲抓取Goodinfo 台灣股市資訊網?

--

--

MinKuan
MinKuan

No responses yet