續接上篇文章
[Python來爬蟲系列文4]用python爬html 檔 (以"月報"資料為例)
我們這次要來爬每季的財務報表
在公開資訊站的連結是這個
http://mops.twse.com.tw/server-java/t164sb01?step=1&CO_ID=1101&SYEAR=2017&SSEASON=3&REPORT_ID=C
這個網頁的爬蟲相對簡單
http://mops.twse.com.tw/server-java/t164sb01?step=1&CO_ID=1101&SYEAR=2017&SSEASON=3&REPORT_ID=C
先注意一下~ 我們有 4 個變數可以控制
分別是 股票代號 , 年度 , 季別 , 財務類別
這在我們以後 更新資料的時候 一定會用到的~
另外看看網址中 這4個變數分別就是
CO_ID: 股票代號
SYEAR: 年度
SSEASON: 季別
REPORT_ID: 財務類別 ( 個別財報(A) 個體財報(B) 合併報表(C) )
注: 大部分都是看 合併報表
有了以上的觀察我們就來開始爬蟲吧
### 爬蟲起手式
import requests
# requests.get 將網站給爬下來
res = requests.get('http://mops.twse.com.tw/server-java/t164sb01?step=1&CO_ID=1101&SYEAR=2017&SSEASON=3&REPORT_ID=C')
res.encoding = 'big5' #變成中文 之前講過 'big5' 不行就用 'utf-8'
from io import StringIO #跟之前一樣 處理 text 和 str 的 套件~~
import pandas as pd
dfs = pd.read_html(StringIO(res.text))
# 1.將 res.text 用 StringIO 轉成 檔案
# 2.再用 pd.read_html 將 html文字檔轉成 dataframe
#### 這邊的 dfs 其實是多個dataframe
#### 我們分別看看裡面有哪些內容 只取 3 個對應看看
### 這3 個表分別代表 網頁的 3 個部分
### 所以表示我們是有真的抓到這些表格的
接下來小白要來講一下 怎麼儲存跟讀取這些季報
小白最近跟別人合作了小專案
所以多學會了 os 這個套件
正好這邊用得上~
首先講個幾招
import os
##第一招: 抓現行目錄
#他會抓目前你開的這個 .IPYNB檔 所在的資料夾
path=os.getcwd()
print(path)
#接著執行看看
mylist=os.listdir()
print(mylist)
#確實有這三樣~
##第三招: 創新的資料夾
#利用 mkdir 來創新的資料夾
# 先檢查downloads 這個資料夾有沒有在現行目錄
if 'downloads' not in os.listdir():
os.mkdir('downloads') #確認沒有 就創建一個
mylist=os.listdir() #最後檢查看一下有沒有
print(mylist)
###所以真的創好了~ 那我們就來講我們財報怎麼儲存跟讀取
## 首先是 儲存
## 設定存檔的路徑
#可以自己打 downloads\2330.html
# 比較聰明的小方式 是用os.path.join
#他會根據作業系統幫我們加 "\" 進去
path = os.path.join('downloads', s + '.html') # 記得要加副檔名喔~~
print(path)
# 接著將資料寫進去
# 將檔案打開,寫入
f = open(path, 'w', encoding='big5')
f.write(res.text)
f.close()
# 將檔案關閉
#可以去目錄下看到它真的寫進去了~~
## 然後是 讀取
#讀取比較簡單
#一樣先設目錄和檔案名稱
#用 read_html 就可以
path = os.path.join('downloads', s + '.html')
dfs=pd.read_html(path, encoding='big5')
### 好勒~~~ 今天的文章就到這邊了 希望各位喜歡
### 最後附上的code裡面有包含 怎麼用 for loop來寫抓多支股票
### 大家掰掰~~ 我們下次見
檔案連結:http://ge.tt/3h3Ffqp2
名稱為 "抓季報.IPYNB"