程式

自動獲取iShares ETF持倉

  • August 10, 2020

我聽說ETF必須一直公開報告他們的持股情況。我已經看到,例如在 iShares 網站上,我可以將持股列表下載為 csv 文件:

https://www.ishares.com/us/products/239705/ishares-phlx-semiconductor-etf

我想有一種方法可以自動免費訪問這些館藏,也許使用一些 API?我檢查了 Blackrock API,但在首頁上,我沒有在“投資組合分析”和“搜尋證券”選項卡上看到任何有關 ETF 的資訊。

我是與網路互動的新手,所以也許我最好的選擇就是Google如何從網頁中提取可下載的內容?

有什麼想法嗎?

無需抓取網站。這應該永遠是最後的手段。下面將導入您詢問的 .csv 文件並將其保存到您選擇的目錄中。如果您不想指定目錄,則可以消除dir對它的任何引用,該文件將直接進入您的工作目錄。我通常單獨保存數據,因此該選項。

from urllib.request import urlretrieve
import pandas as pd

dir = '[Your directory of choice]'

url = 'https://www.ishares.com/us/products/239705/ishares-phlx-semiconductor-etf/\
1467271812596.ajax?fileType=csv&fileName=SOXX_holdings&dataType=fund'

urlretrieve(url, dir + 'SOXX_holdings.csv')

df = pd.read_csv(dir + 'SOXX_holdings.csv', skiprows=10)
print(df.head())

替代上述方法:將數據直接導入 pandas 數據幀,而不是通過傳遞 url 作為參數將其保存在本地。

import pandas as pd

url = 'https://www.ishares.com/us/products/239705/ishares-phlx-semiconductor-etf/\
1467271812596.ajax?fileType=csv&fileName=SOXX_holdings&dataType=fund'

df = pd.read_csv(url, skiprows=10)    
print(df.head())

跳過前 10 行並列印頭部正是我想要查看數據的方式。你可以從這裡做很多其他的事情。

祝你好運。

引用自:https://quant.stackexchange.com/questions/40538