You need to enable JavaScript to run this app. 多页爬取构建Pandas DataFrame仅得最后一页数据的问题求助
优惠活动
大模型
产品
解决方案
定价
更多

多页爬取构建Pandas DataFrame仅得最后一页数据的问题求助

核心错误定位
  • 全量结果存储变量位置错误:用于存放所有爬取行的data列表被写在页码遍历的循环内部,每启动一次新页面的爬取流程,代码就会将data重新初始化为空列表,前几页已爬取的有效数据会被直接清空,最终自然只剩最后一次循环(最后一页)的爬取结果。
  • 代码写法冗余错误:单行处理逻辑中cols = data.append(...) 属于无效代码,list.append() 是无返回值的原地修改方法,将其结果赋值给cols没有任何实际作用,还容易误导逻辑判断。
  • 请求地址格式问题:拼接的URL字符串开头带有多余空格,可能在部分场景下引发请求异常。
修复方案
  • 将data = [] 的初始化操作移到页码循环外部,仅在程序启动时创建一次空列表,后续每爬取到符合要求的行,直接将清洗后的数据追加到该列表中,全程不做重置。
  • 修正行处理逻辑的赋值错误,去掉无意义的返回值赋值,直接执行追加操作即可。
  • 移除URL开头的多余空格,保证请求地址格式合规。
修复后的可运行代码
import requests
import pandas as pd
from bs4 import BeautifulSoup

headers = {'User-Agent': 'Mozilla/5.0'}
# 全局初始化空存储列表,不在循环内重复初始化
data = []

for num in range(1, 3):
    # 移除URL开头的多余空格
    url = 'https://biznes.interia.pl/gieldy/notowania-gpw/profil-akcji-grn,wId,7380,tab,przebieg-sesji,pack,{}'.format(num)
    response = requests.get(url, headers=headers)
    content = response.content
    soup = BeautifulSoup(content, "html.parser")

    notow = soup.find_all('table', class_='business-table-trading-table')
    # 筛选当前页包含"TRANSAKCJA"标识的行
    rows = notow[0].select('tr:has(td:contains("TRANSAKCJA"))')
    
    for row in rows:
        cols = row.find_all('td')
        # 清洗单元格文本
        cleaned_cells = [ele.text.strip() for ele in cols]
        # 过滤空值后直接追加到全局存储列表
        data.append([ele for ele in cleaned_cells if ele])

# 全量页面爬取完成后再生成DataFrame
df = pd.DataFrame(data)      
print(df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.03 21:45:11