網頁

2024年3月26日 星期二

Python:基金持股爬蟲

今天來講一講用 BeautifulSoup來取得基金的持股成分,首先一樣載入相關的套件:

from bs4 import BeautifulSoup
import json, requests
import pandas as pd

我選定的基金網頁是:
https://fund.hncb.com.tw/w/wr/wr04.djhtm?a=ACDD04-005003

用 requests.get() 來爬取網頁內容:
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)

輸出結果:

 
是不是很簡單!
 
這種網頁畫面:

只要選擇 table[0] 即可:
soup.select('table')[0]
 
另外 title 的部分只要直接用  soup.title.text 取出即可:
soup.title.text
 
輸出結果:

 


沒有留言:

張貼留言