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

如何用Python获取ETF.com中ETF分类标签下的全量异步加载数据?

解决ETF Finder多页数据爬取问题

我帮你分析下这个问题哈,你遇到的情况很常见——这类分页表格大多是通过URL参数控制页码的,pd.read_html只能抓取当前请求页面的静态内容,自然拿不到后续分页的数据。给你几个具体的解决步骤:

1. 先摸清分页的URL规律

点击页面上的「下一页」按钮,或者直接手动修改地址栏的页码,观察URL的变化。比如ETF Finder的分页大概率是用page参数控制的:第一页是http://www.etf.com/etfanalytics/etf-finder?page=1,第二页就是http://www.etf.com/etfanalytics/etf-finder?page=2,以此类推到第109页。你可以手动验证下这个规律是否成立。

2. 循环遍历所有页码,批量抓取数据

既然明确了页码参数的规律,就可以写个循环,从1到109构造每个页面的URL,逐个请求并解析表格,最后把所有结果合并成一个大的DataFrame。这里要注意加上请求头伪装浏览器,还可以加个小延迟避免触发反爬机制。

给你写个可直接参考的示例代码:

import pandas as pd
import requests
import time

# 基础URL,后面拼接页码参数
base_url = "http://www.etf.com/etfanalytics/etf-finder?page={}"
# 完善请求头,模拟真实浏览器
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'}
all_etf_data = []

for page_num in range(1, 110):  # 遍历1到109页
    try:
        current_url = base_url.format(page_num)
        response = requests.get(current_url, headers=headers)
        response.raise_for_status()  # 检查请求是否成功(比如404、500错误)
        
        # 解析页面中的表格,取第一个表格(根据实际情况调整索引)
        page_dfs = pd.read_html(response.text)
        etf_df = page_dfs[0]
        all_etf_data.append(etf_df)
        
        print(f"✅ 成功抓取第{page_num}页数据")
        time.sleep(1)  # 延迟1秒,避免请求过于频繁被限制
    except Exception as e:
        print(f"❌ 抓取第{page_num}页失败:{str(e)}")
        continue

# 合并所有页面的数据
final_etf_df = pd.concat(all_etf_data, ignore_index=True)
# 保存到本地CSV文件
final_etf_df.to_csv("full_etf_data.csv", index=False)
print(f"\n🎉 所有数据抓取完成,共获取{len(final_etf_df)}条ETF记录")

3. 额外注意事项

  • 先查看网站的robots.txt(访问http://www.etf.com/robots.txt),确认是否允许爬取这类数据,遵守网站的爬取规则。
  • 如果遇到请求被拒绝,可能需要延长延迟时间,或者添加更多请求头(比如Referer),甚至考虑使用代理IP。
  • 解析表格时,注意pd.read_html返回的是表格列表,你可以打印page_dfs的长度或每个表格的列名,确认哪个索引对应的是你需要的ETF数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:17:28