用Python+Selenium爬取集保戶股權分散表. 台灣集保結算中心 ...

文章推薦指數: 80 %
投票人數:10人

使用excel打開下載的分散表,選取第一列→進入「資料」 →使用「篩選」 →選擇「持股分級」→挑選”2"之後,再將選出的資料,複製到新的檔案,並把非相關的 ... GetunlimitedaccessOpeninappHomeNotificationsListsStoriesWrite利用Python+Selenium爬取集保戶股權分散表PhotobyKarimGhantousonUnsplash台灣的股票投資人,還算是蠻幸福的,政府在一些統計的資料,有不少可以研究的地方,集保戶股權分散表就是其中一個可以研究的有趣資料。

該網站提供的服務,我覺得很好,但是沒有到位,你可以在網站的下方”說明”處的股權分散表,直接下載最新一周的所有證券的股權分散表。

若有多檔證券查詢需求,可至「本公司官網->資料查詢/統計->開放資料專區->股務資訊->股權分散表」下載註:資料範圍為每周最後一營業日(含周末補班日)之登摺餘額。

在政府的opendata網站或其它地方,無法找到現成的歷史”股權分散表”資料,所以決定寫一個Python的程式完成。

在網路上爬資料,有一些大家默認的規則,希望大家要遵守,有的網站主頁下放入robots.txt說明希望遵守的爬蟲規則,但是台灣集中保管結算所沒有查到,所以我只能以”不急劇的增加網站服務流量,影響他人使用網站的品質”的方式來規劃這爬蟲。

程式的目標:用Python+Selenium爬取歷史資料(因為要爬取的清單有2千多筆,為了減少被擋的風險,所以用Selenium模擬流灠器來執行。

主要步驟如下:步驟一:建立要爬的股票清單步驟二:確認要爬的日期步驟三:利用selenium爬取個股分散表,並寫入檔案步驟四:已下載的資料的整理步驟一:建立要爬的股票清單這個步驟有點麻煩,我們可以在網站上,找到現成的資料,但是都還是要經過整理或是資料非最新,所以研究過後,我決定用股權分散表」下載的最新一期資料,用excel整理成最新的清單來使用:先下載最新的股權分散表清單使用excel打開下載的分散表,選取第一列→進入「資料」→使用「篩選」→選擇「持股分級」→挑選”2"之後,再將選出的資料,複製到新的檔案,並把非相關的資料清除,並選擇第一欄,利用「資料」→「移除重複」將重複股票代碼清除,再存成.csv檔。

依之前使用經驗,如果一次執行所有的證券清單的爬取,會耗時非常久,並且有可能遇到不可預測的意外。

所以我建議把清單分成數個檔案,每個檔案包函約200~250個證券清單,可以減少執行時意外中止的情況,這個清單建成是為了這次的爬蟲之用,之後就是直接每周下載最新分散表,不需要再用到這清單。

步驟二:確認要爬取的日期這步驟為了要了解網站上所定義的日期,選定我們要下載日期,並最終將這日期寫入我們下載的股權分散表中,在這裏我們選用的是”20190906"這周為目標。

我們的目標是將下載的資料存成csv,並讓該csv檔案與我們從股權分散表下載的資料格式一致(步驟四會說明資料不一致的地方與處理),這裏有個小訣竅,先把chrome的隱藏視窗選項取消(程式碼中設定),建立一個stock_index_list_short.csv,只包括1個股票代碼,再觀一下日期的清單,最新一期的select_date_index為0,次一期為1,最舊的一期應該在52~54之間(請重覆試驗幾次),因為資料只保留最近一年的資訊。

步驟三:利用selenium爬取個股分散表,並寫入檔案這部份,我們使用實際檔案來說明:A.#設定所需packagesB.#定義function與爬取的變數C.#將股票清單讀成listD.#寫入集保分散表資料E.#寫入標題列F.#設定開啟chrome之設定(隱藏模式),並開啟目標網頁G.#使用forloop下載所有的股票的分散表資訊I.整理回傳網頁資訊,以一列方式寫入download.csv檔案中J#讓程式随機暫停3~15秒K.主程式完整程式碼如下:步驟四:已下載的資料的整理在下載完成的資料,我們預期應該與從集保結算所的下載的最新資料格式一致,但是檢查後,發現”持股分級”在我們爬下來的資料只到至「16」,而直接從集保結算所下載的資料是「17」。

我們必需要再將download_0/1/2‧‧‧.csv裏的持股級數的「16」改成「17」,並將download_0/1/2‧‧‧.csv裏的第5欄「持股數量分級」整欄刪除,才會變成一致。

2020/08/26Update:寫了一個小程式,做步驟四的資料整理,我把下載下來的資料,分成8份(download_0.csv~download_8.csv),將其整理成一份download_summary.csv,並對沒有數據的股票填”0",且將符合”持股分級”的16&“持股數量分級”的”合計”的”持股分級”改為”17"個人只是業餘的程式愛好者,主要還是以投資為主,因為程式非商業用途,所以也不考慮執行效率問題,只以實用性解決問題為導向。

如果你喜歡這篇文章或是覺得這篇文章對你有任何幫助請給我一些掌聲,拍拍手:)👏謝謝!Morefrom數字不準確Follow對於巨觀的現象有濃厚的興趣,挑戰它使成為可邏輯性推測的模型;數字不準確,但可以參考!Lovepodcastsoraudiobooks?Learnonthegowithournewapp.TryKnowableAboutHelpTermsPrivacyGettheMediumappGetstarted數字不準確8Followers對於巨觀的現象有濃厚的興趣,挑戰它使成為可邏輯性推測的模型;數字不準確,但可以參考!FollowMorefromMediumEJThorntonCraftProject:ZinniasfromPineConesCollinCrespeLearningToPythonin30days:Day1DeborahPrumEINSTEINONTIMEThePhenomenalFriendMrNevilleGoddard’sTeachingLegacy(1)HelpStatusWritersBlogCareersPrivacyTermsAboutKnowable



請為這篇文章評分?