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

如何使用BeautifulSoup跨多网页抓取表格并合并为单个DataFrame?

批量抓取多页表格并合并为单个DataFrame

实现思路

循环遍历第0到27页的目标表格,将每页数据抓取为独立的DataFrame,最后合并所有DataFrame得到完整数据集。

完整代码

import requests
from bs4 import BeautifulSoup
import pandas as pd

def fetch_page_data(page_num):
    """抓取指定页码的表格数据,返回对应的DataFrame"""
    base_url = 'https://home.treasury.gov/resource-center/data-chart-center/interest-rates/TextView?type=daily_treasury_yield_curve&field_tdr_date_value=all&page={}'
    url = base_url.format(page_num)
    
    try:
        page = requests.get(url, timeout=10)
        page.raise_for_status()  # 抛出HTTP请求异常
        soup = BeautifulSoup(page.text, 'lxml')
        
        # 定位表格
        table = soup.find('table', {'class':'views-table views-view-table cols-20'})
        if not table:
            print(f"第{page_num}页未找到目标表格,跳过")
            return None
        
        # 提取表头
        headers = [th.text.strip() for th in table.find_all('th')]
        
        # 提取行数据
        rows = []
        for row in table.find_all('tr')[1:]:
            row_data = [td.text.strip() for td in row.find_all('td')]
            if row_data:  # 跳过空行
                rows.append(row_data)
        
        # 生成DataFrame
        df_page = pd.DataFrame(rows, columns=headers)
        print(f"成功抓取第{page_num}页数据,共{len(df_page)}行")
        return df_page
    
    except Exception as e:
        print(f"抓取第{page_num}页出错: {str(e)}")
        return None

# 初始化空列表存储各页DataFrame
all_dfs = []

# 遍历0到27页
for page in range(0, 28):
    df_page = fetch_page_data(page)
    if df_page is not None:
        all_dfs.append(df_page)

# 合并所有DataFrame
if all_dfs:
    final_df = pd.concat(all_dfs, ignore_index=True)
    print(f"合并完成,总数据行数: {len(final_df)}")
    
    # 可选:保存到本地文件
    # final_df.to_csv('treasury_yield_curve.csv', index=False, encoding='utf-8-sig')
else:
    print("未抓取到任何有效数据")

代码说明

  • 封装fetch_page_data函数负责单页数据抓取,包含异常处理,避免某一页出错导致整个程序中断。
  • 设置请求超时时间,防止请求长时间卡住。
  • 用pd.concat合并所有页的DataFrame,通过ignore_index=True重置索引,避免索引重复。
  • 添加日志打印,方便跟踪抓取进度和异常情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 08:18:25