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

如何为需要身份认证的多页URL编写爬虫for循环实现分页采集

多页URL爬虫采集实现

需求说明

  • 需要通过for循环实现多页URL的爬虫采集,由于代码涉及身份认证,此处使用示例URL演示,核心分页标识为currentPage=1
  • 第i页对应的URL参数为currentPage=i,i取值为正整数1、2、3、4……
  • 原有代码仅支持单页数据采集,需改造为支持多页批量采集

优化后完整代码

原有代码存在单页硬编码、全局变量存储数据易覆盖的问题,修改后可直接实现多页采集:

import requests
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry
import urllib3
import pandas as pd
from requests_kerberos import OPTIONAL, HTTPKerberosAuth
import web

# 重试会话复用逻辑保留
def requests_retry_session(retries=10,
                           backoff_factor=0.3,
                           status_forcelist=(500, 502, 503, 504),
                           session=None):
    session = session or requests.Session()
    retry = Retry(total=retries,
                  read=retries,
                  connect=retries,
                  backoff_factor=backoff_factor,
                  status_forcelist=status_forcelist)
    adapter = HTTPAdapter(max_retries=retry)
    session.mount("http://", adapter)
    session.mount("https://", adapter)
    return session

# 初始化认证cookie
a = web.get_mwinit_cookie()

# 爬虫函数修改为返回单页数据,取消全局变量
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)
    return pd.concat(data, sort=False)

if __name__ == "__main__":
    # 此处配置需要采集的最大页码
    max_page = 10
    # 示例URL基础模板,用%s占位分页参数位置
    base_url = "https://example-url.com/ABCD/customer?currentPage=%s&end"
    # 存储所有页数据的列表
    all_data = []
    
    for page in range(1, max_page + 1):
        # 拼接当前页URL
        current_url = base_url % page
        print(f"正在采集第{page}页:{current_url}")
        page_df = Scraper(current_url)
        all_data.append(page_df)
    
    # 合并所有页数据为总表
    total_df = pd.concat(all_data, ignore_index=True, sort=False)
    # 打印/导出总表
    print(total_df)
    # 可选导出为Excel:total_df.to_excel("采集结果.xlsx")

核心修改说明

  • 取消了原函数的全局变量df,改为每个分页采集完成后返回当前页的DataFrame,避免数据覆盖
  • 新增了URL模板,通过for循环动态拼接每一页的currentPage参数
  • 用列表存储所有分页的DataFrame,最后统一合并为全量数据,性能更优
  • 修正了原代码中HTTPAuth拼写错误,替换为导入的HTTPKerberosAuth,补全了URL的引号和请求参数问号分隔符

内容的提问来源于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 03:15:01