Python爬蟲:Goodinfo的ROE排名
前言
今天將會分享如何使用python爬取Goodinfo的各家公司的財務報表。
在開始爬蟲時都要先研究 目標是誰?結構是甚麼?我要什麼資料?希望最後的資料長怎麼樣? 在腦中有些許畫面後,我們就可以開始了!!!
將學習到
- 使用requests的headers取得goodinfo
- 用BeautifulSoup整理html
- 接著用pandas整理出我們要的資訊
環境設定
win10 Anaconda 的 jupyter(6.0.3)
使用套件
import requests
import bs4
import pandas
開始工作
步驟1:檢查目標
我們在開始打程式之前可以先點開該網站並按滑鼠右鍵”檢查”,先快速看過此網站結構。
步驟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'
使用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”
的解析速度快、容錯能力強。
select
跟find
是類似的搜尋方式,而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 台灣股市資訊網?