如何使用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
相关产品推荐
相关产品推荐

