今天來講一講用 BeautifulSoup來取得基金的持股成分,首先一樣載入相關的套件:
from bs4 import BeautifulSoup
import json, requests
import pandas as pd
我選定的基金網頁是:
https://fund.hncb.com.tw/w/wr/wr04.djhtm?a=ACDD04-005003
url = 'https://fund.hncb.com.tw/w/wr/wr04.djhtm?a=ACDD04-005003'
response = requests.get(url)
web_content = response.text
soup = BeautifulSoup(web_content, 'lxml')
soup
輸出結果:
選取 table,然後將 table 轉成 list 形式:
data = soup.select('table')[1]
lst = pd.read_html(data.prettify())
lst
輸出結果:
然後我們要取出 list[0] 4~9列股票名稱,然後放入 dataframe:
df = lst[0].iloc[4:9]
df
輸出結果:
處理索引值:
df.reset_index(drop=True)
輸出結果:
完整程式碼:
url = 'https://fund.hncb.com.tw/w/wr/wr04.djhtm?a=ACDD04-005003'
response = requests.get(url)
web_content = response.text
soup = BeautifulSoup(web_content, 'lxml')
data = soup.select('table')[1]
lst = pd.read_html(data.prettify())
title = lst[0].iloc[2][0]
df = lst[0].iloc[4:9].reset_index()
fund_list = df[0].iloc[0:5].tolist()
fund_list.extend(df[4].iloc[0:5].tolist())
print('基金名稱:', title)
print('持股資料(Dataframe):\n', df)
print()
print('股票名稱:', fund)
輸出結果:
是不是很簡單!
如果是像00900 :https://www.cmoney.tw/etf/tw/00900
這種網頁畫面:
另外 title 的部分只要直接用 soup.title.text 取出即可:
soup.title.text
輸出結果:
沒有留言:
張貼留言