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

网页爬虫问题:如何将18页价格数据合并至同一DataFrame不覆盖

问题解决思路

你的代码只显示最后一页数据,是因为每次爬取新页面时prices变量会被重新覆盖,最终创建DataFrame时只用了最后一次的prices值。另外get_prices函数存在缩进问题,会导致每个商品仅提取最后一个价格(甚至可能出现逻辑错误)。

修改后的完整代码
import pandas as pd
from bs4 import BeautifulSoup
from requests import get  # 确保导入请求方法

def get_basic_info(content_list):
    basic_info = []
    for item in content_list:
        basic_info.append(item.find_all('h5'))
    return basic_info

def get_prices(basic_info):
    prices = []
    for item in basic_info:
        for i in item:
            price = i.find("span", attrs = {"class" : "price"})
            if price:  # 缩进调整到内部循环,确保每个h5标签的价格都被检查
                prices.append(price.text.strip())  # 去除文本前后冗余空格
    return prices

# 初始化空列表,用来累计所有页面的价格数据
all_prices = []

# range左闭右开,爬18页需设置为1到19
for page in range(1, 19):
    # 用f-string简化URL拼接
    base_url = f"https://www.easycar.tw/carList.php?Action=search&show=col&lifting=desc&year=&year1=&page={page}"
    response = get(base_url, headers=headers)
    html_soup = BeautifulSoup(response.text, 'html.parser')
    content_list = html_soup.find_all('div', attrs={'class': 'caption'})
    basic_info = get_basic_info(content_list)
    current_page_prices = get_prices(basic_info)
    # 将当前页价格追加到总列表,而非覆盖
    all_prices.extend(current_page_prices)

# 用累计的所有价格创建DataFrame
data = pd.DataFrame({"Price": all_prices})
print(data)
关键修改点
  • 新增all_prices空列表,专门存储所有页面的价格,避免循环时数据被覆盖
  • 修正循环范围为range(1,19),解决原代码少爬第18页的问题
  • 调整get_prices函数的缩进逻辑,确保每个商品的所有价格标签都被处理
  • 使用extend方法追加当前页价格,而非直接赋值,保证数据累计
  • 用f-string重构URL,提升代码可读性
  • 给价格文本添加strip(),清理冗余空格或换行符

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 06:41:16