如何用Python和Pandas爬取Morningstar指定页面的关键统计表格
爬取Morningstar估值表格并导入Jupyter Notebook
步骤1:安装必要依赖
在Jupyter的代码单元格或终端中安装所需库:
pip install requests beautifulsoup4 pandas
步骤2:发送请求并解析页面
Morningstar会拦截无标识的请求,需添加请求头模拟浏览器访问:
import requests from bs4 import BeautifulSoup import pandas as pd # 目标URL url = "https://www.morningstar.com/stocks/xidx/smsm/valuation" # 模拟浏览器请求头 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" } # 发送请求并检查状态 response = requests.get(url, headers=headers) response.raise_for_status() # 解析HTML内容 soup = BeautifulSoup(response.text, "html.parser")
步骤3:定位并提取表格数据
根据页面结构,目标估值表格的class为snapshot-data-table,直接定位提取:
# 找到目标表格 table = soup.find("table", class_="snapshot-data-table") # 提取表头文本 table_headers = [th.get_text(strip=True) for th in table.find_all("th")] # 提取每行数据 table_rows = [] for row in table.find_all("tr")[1:]: # 跳过表头行 row_data = [td.get_text(strip=True) for td in row.find_all("td")] if row_data: table_rows.append(row_data)
步骤4:转换为DataFrame用于分析
将提取的数据转为Pandas DataFrame,即可在Jupyter中直接使用:
# 生成DataFrame valuation_df = pd.DataFrame(table_rows, columns=table_headers) # 展示表格数据 display(valuation_df) # 可选:保存为本地文件 valuation_df.to_csv("smsm_valuation_data.csv", index=False)
额外说明
- 如果上述方法拿不到数据,说明页面是动态渲染的,可改用
selenium模拟浏览器加载:先安装pip install selenium,再下载对应浏览器的驱动(如ChromeDriver),通过浏览器实例获取页面源码。 - 频繁请求可能触发反爬,建议添加请求间隔(
time.sleep(2)),避免短时间内重复访问。
内容的提问来源于stack exchange,提问作者MudFlaps
相关产品推荐
相关产品推荐

