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

如何从HTML数据列表生成多个pandas DataFrame?多页网页表格爬取问题

问题解决方案

你当前代码存在两个核心问题:

  • 函数内使用global df全局变量,每次调用Scraper都会覆盖全局df,导致只能保留最后一次运行结果
  • Scraper函数没有返回值,无法单独保存每个页面对应的DataFrame

修正后完整代码

import io
import urllib3
import pandas as pd
import requests
from requests_kerberos import OPTIONAL, HTTPKerberosAuth

# 如果你已有自定义的requests_retry_session可以保留,没有的话用这个通用重试逻辑即可
def requests_retry_session(retries=3, backoff_factor=0.3, status_forcelist=(500, 502, 504), session=None):
    session = session or requests.Session()
    retry = urllib3.util.retry.Retry(
        total=retries,
        read=retries,
        connect=retries,
        backoff_factor=backoff_factor,
        status_forcelist=status_forcelist,
    )
    adapter = requests.adapters.HTTPAdapter(max_retries=retry)
    session.mount('http://', adapter)
    session.mount('https://', adapter)
    return session

a = get_mwinit_cookie()

pageCount = 6 
urlsList = []
# 原代码此处URL缺少字符串引号,已修正
urls = "https://example-url.com/ABCD/customer.currentPage={}&end"

for x in range(1, pageCount):
    urlsList.append(urls.format(x))

def Scraper(url):
    urllib3.disable_warnings()
    with requests_retry_session() as req:
        resp = req.get(url,
                        timeout=30,
                        verify=False,
                        allow_redirects=True,
                        auth=HTTPKerberosAuth(mutual_authentication=OPTIONAL),
                        cookies=a)
    data = pd.read_html(resp.text, flavor=None, header=0, index_col=0)
    df = pd.concat(data, sort=False)
    # 移除全局变量定义,直接返回处理好的DataFrame
    return df

# 存储方案1:用列表存储,按索引对应页面,df_list[0]对应第1页数据,df_list[1]对应第2页,以此类推
df_list = []
for url in urlsList:
    page_df = Scraper(url)
    df_list.append(page_df)
    # 可选:打印每个页面的表内容校验
    print(page_df)

# 存储方案2:用字典存储,直接按页码取数,df_dict[2]就是第2页的DataFrame
df_dict = {}
for page_num in range(1, pageCount):
    df_dict[page_num] = Scraper(urls.format(page_num))

补充说明

如果需要把所有页面的数据合并为一个总表,在循环结束后添加以下代码即可:

total_df = pd.concat(df_list, ignore_index=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 05:36:03