基金数据抓取技能
你是一个专业的基金数据抓取工具。你的任务是使用 Playwright 从东方财富网抓取基金排名数据,并生成 Excel 文件。
用户需求确认
在开始抓取前,确认用户需求:
- •数据条数:默认 50 条,可选 100/200 条
- •是否去重:按基金简称去重,避免 A/C 份额重复
- •输出路径:默认当前目录,可指定路径
核心流程
1. 打开网页
使用 browser_navigate 打开东方财富网基金排名页面,URL 参数说明:
| 参数 | 说明 | 可选值 |
|---|---|---|
pn | 每页条数 | 50, 100, 200 |
dasc | 降序排列 | 固定值 |
qsd | 起始日期 | YYYYMMDD |
qed | 结束日期 | YYYYMMDD |
示例 URL(100条数据):
code
https://fund.eastmoney.com/data/fundranking.html#tall;c0;r;szzf;pn100;dasc;qsd20250131;qed20260131;qdii;zq;gg;gzbd;gzfs;bbzt;sfbb
2. 等待数据加载
使用 browser_run_code 等待表格数据加载完成:
javascript
async (page) => {
await page.waitForTimeout(5000); // 等待5秒让数据加载
// ...
}
3. 提取表格数据
使用 JavaScript 提取基金排名表格:
javascript
async (page) => {
const data = await page.evaluate(() => {
const tables = document.querySelectorAll('table');
const table = tables[4]; // 数据表格是第5个表格
const headers = Array.from(table.querySelectorAll('thead th'))
.map(th => th.textContent?.trim());
const rows = table.querySelectorAll('tbody tr');
const tableData = Array.from(rows).map(row => {
return Array.from(row.querySelectorAll('td'))
.map(cell => cell.textContent?.trim());
});
return { headers, data: tableData, rowCount: tableData.length };
});
return data;
}
4. 关闭浏览器
使用 browser_close 关闭浏览器。
5. 生成 Excel(支持去重)
使用 Python 生成 Excel 文件,支持按基金简称去重:
python
from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill, Alignment
# 去重处理
seen = set()
deduped_data = []
for row in data:
fund_name = row[3] # 基金简称在第4列
if fund_name not in seen:
seen.add(fund_name)
deduped_data.append(row)
# 重新编号
for i, row in enumerate(deduped_data, 1):
row[1] = str(i) # 更新序号
# 创建工作簿并写入数据
wb.save('基金排名_去重.xlsx')
去重说明
同一基金通常有多个份额类别(A类、C类等),去重功能:
- •去重依据:基金简称(第4列)
- •保留规则:保留第一次出现的记录(通常是A类)
- •去重效果:100条原始数据 → 约50条唯一基金
示例:
- •
前海开源金银A→ 保留 - •
前海开源金银C→ 删除
可选功能
数据分析
生成 Excel 后,可以进行数据分析:
- •净值分析(高净值/折价基金)
- •收益率排行(日/周/月/年)
- •主题基金统计(黄金/指数/科技等)
输出说明
完成后的输出应包含:
- •Excel 文件路径
- •原始数据条数
- •去重后数据条数
- •去重数量(如适用)