爬蟲實戰,台股證交所、公開資訊觀測站、鉅亨網-從零開始的Python股票爬蟲教學(三)

前言

這個章節來到Python的最強功能【網頁爬蟲】,這也是數據分析最重要的前菜,大家想想看,要進行數據分析前最重要的是什麼?

當然就是要有數據,而數據的來源通常就是網路上公開的資料,但有些網站沒有提供下載的按鍵,這時候就要解析網頁結構去爬取我們想要的數據,最後將爬蟲寫成每日自動爬取,如此一來就可以進行數據分析的部分囉!

立即訂閱電子報,掌握最新資訊!

    電子郵件

    有興趣的主題
    量化交易金融知識台灣股市國內期貨海外期貨虛擬貨幣

    有興趣的量化交易軟體/平台
    不清楚MultiChartsTradingViewPythonXQMT4MT5

    還有什麼詢問的?

    好富投 1920x400
    好富投 978x258

    點我了解更多資訊


    一、爬蟲技巧SOP

    Py 101209161710
    Py 101209161711

    二、證交所爬蟲

    證交所網站連結:https://www.twse.com.tw/zh/

    python_crawler2_101112151608

    data為表格型態 ➨ pd.read

    import pandas as pd
    import requests
    import io
    
    # 將json改為csv
    
    url = 'https://www.twse.com.tw/exchangeReport/MI_INDEX?response=csv&date=20220412&type=ALLBUT0999&_=1649743235999'
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/111.25 (KHTML, like Gecko) Chrome/99.0.2345.81 Safari/123.36'}
    
    res = requests.get(url,headers=headers)
    
    # 去除指數價格
    lines = [l for l in res.text.split('\n') if len(l.split(',"'))>=10]
    # 將list轉為txt方便用csv讀取
    df = pd.read_csv(io.StringIO(','.join(lines)))
    # 將不必要的符號去除
    df = df.applymap(lambda s:(str(s).replace('=','').replace(',','').replace('"',''))).set_index('證券代號')
    # 將數字轉為數值型態
    df = df.applymap(lambda s:pd.to_numeric(str(s),errors='coerce')).dropna(how='all',axis=1)
    df

    python_crawler1_101112151600

    三、公開資訊觀測站爬蟲

    公開資訊觀測站網站連結:https://mops.twse.com.tw/mops/web/index

    python_crawler1_101112151601
    python_crawler1_101112151602

    data為表格型態 ➨ pd.read

    點選按鈕 ➨ payload

    import pandas as pd
    import requests
    import io
    
    url = 'https://mops.twse.com.tw/server-java/FileDownLoad'
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/111.25 (KHTML, like Gecko) Chrome/99.0.2345.81 Safari/123.36'}
    payload = {
        'step': '9',
        'functionName': 'show_file2',
        'filePath': '/t21/sii/', # otc
        'fileName': 't21sc03_110_1.csv'
    }
    
    res = requests.post(url,data=payload,headers=headers)
    
    res.encoding = 'utf8'
    df = pd.read_csv(io.StringIO(res.text))
    # 將不必要的符號去除
    df = df.applymap(lambda s:str(s).replace(',','')).set_index('公司代號')
    # 將數字轉為數值型態
    df = df.applymap(lambda s:pd.to_numeric(str(s),errors='coerce')).dropna(how='all',axis=1)
    df


    四、鉅亨網爬蟲

    鉅亨網網站連結:https://www.cnyes.com/

    data為表格型態 ➨ pd.read

    點選按鈕 ➨ payload

    import pandas as pd
    import requests
    import io
    
    dfs = pd.DataFrame()
    # 將所有頁面的df組合
    for page in range(1,50):
        url = f"https://www.cnyes.com/twstock/financial2.aspx?pi={page}&param=2021%E5%B9%B412%E6%9C%88&datetype=ALL&market=T"
        headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/111.25 (KHTML, like Gecko) Chrome/99.0.2345.81 Safari/123.36'}
        payload = {
            'pi': page,
            'param': '2021年12月',
            'datetype': 'ALL',
            'market': 'T'
        }
        res = requests.post(url,data=payload,headers=headers)
        df = pd.read_html(res.text,header=0)[0]
        if df['代碼'][0] == '無相關資料':
            break
        dfs = dfs.append(df)
    
    # 去除不必要的符號
    dfs = dfs.applymap(lambda s:str(s).replace(',','')).set_index('代碼')
    # 將數字轉為數值型態
    dfs = dfs.applymap(lambda s:pd.to_numeric(str(s),errors='coerce')).dropna(how='all',axis=1)
    dfs
    python_crawler1_101112151606-2

    結論

    網頁爬蟲實戰的上半篇我們爬的網頁資料大多屬於表格(DataFrame)的形式,這代表通常我們只需要到 Network 內尋找向網站 requests 的 url 和 payload 就可以使用 pandas 套件內的功能去成功索取 data,但有些網站的資料看似使用表格去顯示但卻怎麼爬都爬不到怎麼辦呢?

    這就代表我們需要解析網頁原始碼來一筆一筆 data 去做整理,想知道如何去爬這些惱人的網站嗎? 那就不要錯過爬蟲實戰,TradingView/CMoney/Yahoo finance-從零開始的Python股票爬蟲教學(四) !

      電子郵件

      有興趣的主題
      量化交易金融知識台灣股市國內期貨海外期貨虛擬貨幣

      有興趣的量化交易軟體/平台
      不清楚MultiChartsTradingViewPythonXQMT4MT5

      還有什麼詢問的?


      量化通粉絲社群,一起討論程式交易!

      加入LINE社群量化交易討論群」無壓力討論與分享!

      加入臉書社團「程式交易 Taiwan」即時獲取實用的資源!

      Oscar
      Oscar

      具備多年量化經驗,現於外商基金公司擔任量化交易工程師,研究臺股、期貨、加密貨幣等交易策略及回測系統。擅長使用Python網站爬蟲、資料處理、建構回測系統、風險分析,及資料統計視覺化。曾受邀至國立臺北商業大學擔任業師授課。未來將著重在機器學習、神經網路於投資交易上的應用。

      文章: 5

      發佈留言

      發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *