【Python爬蟲】【實作】爬取期交所商品保證金資料 維持保證金 原始保證金 python兩大爬蟲方法一次教給你
一、前言
本篇教學文章有兩大重點:
1.爬取期交所商品保證金資料、2.requests bs4及pandas.read_html測試和比較。
重點1先不說,可以把資料存進資料庫或者做報表等時候可以隨時呼叫,
重點2如果使用pandas.read_html在可用的狀況下可以省多少工!!!
又是一篇手把手文章,再度破壞市場行情的交給你了~
進入教學前,不要忘了訂閱按讚分享唷!
部落格教學網站:
https://pixnashpython.pixnet.net/blog
想要即時訂閱最新文章:
https://forms.gle/MdXmiF2HgHhNChL46
訂閱Telegram來接收最新資訊:
https://t.me/joinchat/VUUuDt67Uq5l6CIQ
二、分別使用兩大方法爬取資料
(1)方法一:使用正規的爬蟲requests + bs4
使用requests + bs4就是中規中矩,流程大致如下:
1.給予requests目標網址(url)
2.放入bs4解析requests的txt
3.使用soup中的方法來找到我們所要爬取的資料
4.資料整理(我個人喜歡整理成df型態) 沒有一定方便呼叫就好
(程式碼在下方)
(2)方法二:使用pandas中的read_html
1.查看網頁是否有table標籤,如果有可嘗試使用pandas.read_html
2.把網址丟進入(如果有多table則返回list裡面放著df)
(程式碼在下方)
如果再符合pandas.read_html的情況下,可以省去找到資料及整理資料的時間,
但如果你要抓的資料沒有table標籤,或是其他細部的資料,
可能就只能用soup中的方法,慢慢抽取慢慢看了~
完整程式碼
import requests
import pandas
from bs4 import BeautifulSoup
'''
取得期交所商品保證金資料
'''
# =============================================================================
# 方法一 - 正規爬蟲
# =============================================================================
# 目標網址
url = 'https://www.taifex.com.tw/cht/5/indexMargingDetail'
# 使用get
res = requests.get(url)
# 放入bs4
soup = BeautifulSoup(res.text, "html.parser")
# 取得資料
margin = soup.find_all('table')[0].find_all('tr') # 0為保證金資料
# 資料整理
data = []
for tag in margin:
s = tag.text.replace(',', '').split('\n')
s = s[1:-1] # 去頭去尾
data.append(s)
df1 = pandas.DataFrame(data, columns=data[0]).iloc[1:]
# =============================================================================
# 方法二 - 使用pandas.read_html (結構剛好可以用)
# =============================================================================
# 使用read_html
df2 = pandas.read_html(url)[0] # 為margin
再程式碼的地方我們可以看到方法一,其中資料整理的部分還包含用迴圈抽取資料(for),
資料的分割取代(replace、split)及資料的篩選,最後整理成list才轉成df。
三、後記
大家pandas.read_html(url)是一個非常好用的工具,
想取得什麼樣的資料可以告訴我唷!,如果大家有共同需求肯定帶給大家手把手教學。
但如果遇到不能使用作弊方法,那還是乖乖使用正規的方法,
所以requests與bs4還是要學啦!
部落格教學網站:
https://pixnashpython.pixnet.net/blog
想要即時訂閱最新文章:
https://forms.gle/MdXmiF2HgHhNChL46
訂閱Telegram來接收最新資訊:
https://t.me/joinchat/VUUuDt67Uq5l6CIQ
留言列表