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

如何在Python Pandas爬虫逻辑不变的情况下用concat替代append

用Pandas concat替代append解决弃用警告

你遇到的是Pandas官方弃用append方法的警告,要保持原有爬虫逻辑不变的前提下替换成concat,可以有两种高效实现方式,核心都是避免在循环中频繁修改主DataFrame:

方案一:先收集数据列表再转DataFrame(推荐,性能更优)

用Python原生列表存储每条商品数据,最后一次性生成DataFrame,比循环调用concat效率更高:

import requests
import pandas as pd
from bs4 import BeautifulSoup

url = "https://www.breuninger.com/de/damen/luxus/bekleidung-jacken-maentel/"

headers = {
    "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.61 Safari/537.36",
}

res = requests.get(url, headers=headers)
soup = BeautifulSoup(res.text,"lxml")

# 初始化空列表存储商品数据
products = []

for item in soup.select(".suchen-produkt a"):
    marke = item.select_one(".suchen-produkt__marke").get_text()
    name = item.select_one(".suchen-produkt__name").get_text()
    preis = item.select_one(".suchen-produkt__preis").get_text()
    # 将单条商品数据加入列表
    products.append({'Marke':marke,'Name':name,'Preis':preis})

# 从列表生成最终DataFrame
df = pd.DataFrame(products, columns=["Marke","Name","Preis"])

print(df)
df.to_csv("products.csv", index=False)

方案二:用concat严格替代原append逻辑

如果要完全对应原代码“每次添加一条数据到DataFrame”的逻辑,可以将每条数据包装成小DataFrame,收集后用concat合并:

import requests
import pandas as pd
from bs4 import BeautifulSoup

url = "https://www.breuninger.com/de/damen/luxus/bekleidung-jacken-maentel/"

headers = {
    "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.61 Safari/537.36",
}

res = requests.get(url, headers=headers)
soup = BeautifulSoup(res.text,"lxml")

# 初始化空列表存储单个数据的小DataFrame
dfs = []

for item in soup.select(".suchen-produkt a"):
    marke = item.select_one(".suchen-produkt__marke").get_text()
    name = item.select_one(".suchen-produkt__name").get_text()
    preis = item.select_one(".suchen-produkt__preis").get_text()
    # 生成单条数据的小DataFrame并加入列表
    df_item = pd.DataFrame([{'Marke':marke,'Name':name,'Preis':preis}])
    dfs.append(df_item)

# 合并所有小DataFrame,ignore_index=True重置索引
df = pd.concat(dfs, ignore_index=True)

print(df)
df.to_csv("products.csv", index=False)

关键修改说明

  1. 移除原代码中初始化空DataFrame的操作,改用列表存储中间数据
  2. 循环中不再直接修改主DataFrame,避免频繁创建新对象
  3. 循环结束后一次性生成或合并DataFrame,彻底消除弃用警告

内容的提问来源于stack exchange,提问作者robots.txt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 13:25:32