You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Beautiful Soup提取不同标签页下的HTML表格

问题原因

FT基金持仓页的资产配置、行业(Sectors)、地区(Regions)分属三个独立表格,其中Regions表格默认通过CSS隐藏,你之前仅筛选了索引为0和1的两个表格,漏掉了索引为2的地区表格。

修改后代码
import requests
import pandas as pd
from bs4 import BeautifulSoup

List = ['LU0526609390:EUR', 'IE00BHBX0Z19:EUR', 'LU1076093779:EUR', 'LU1116896363:EUR']

df = pd.DataFrame(List, columns=['List'])
urls = 'https://markets.ft.com/data/funds/tearsheet/holdings?s='+ df['List']

for url in urls:
    ISIN = url.split('=')[-1].replace(':', '_')
    ISIN = ISIN[:-4]
    r = requests.get(url).content
    try:
        # 直接读取页面所有表格,无需单独通过soup筛选
        all_tables = pd.read_html(r, index_col=0)
        df1 = all_tables[0] # 资产配置表
        df_sector = all_tables[1] # 行业表
        df_region = all_tables[2] # 地区表
    except Exception:
        continue   
    # 处理资产配置表
    del df1['% Short']
    del df1['% Long']
    df1 = df1.rename(columns={'% Net assets': ISIN})
    # 处理行业表
    del df_sector['Category average']
    df_sector = df_sector.rename(columns={'% Net assets': ISIN})
    # 处理地区表
    del df_region['Category average']
    df_region = df_region.rename(columns={'% Net assets': ISIN})
    # 合并三个表
    df = pd.concat([df1, df_sector, df_region])
    print(df)
补充说明

如果运行后仍无法读取到第三个地区表格,先安装lxml解析库提升解析完整度:
pip install lxml
再将pd.read_html(r, index_col=0)修改为pd.read_html(r, index_col=0, flavor='lxml')即可。

内容的提问来源于stack exchange,提问作者Tcs106

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 04:36:03