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

Selenium+BeautifulSoup亚马逊多页数据采集函数复用方案咨询

问题解答

函数复用可行性

完全可以复用你定义的采集函数,既然你已经验证过第二页的DOM结构和首页完全一致,只需要对现有函数做少量调整就能适配多页采集场景。

现有函数调整建议

原函数依赖全局soup变量、页码写死为1、缺少异常兼容,调整后的代码如下:

from datetime import date
import pandas as pd

def data_collection(soup, page_num):
    title = soup.find_all(name = "span", class_ = "a-size-base-plus a-color-base a-text-normal")
    all_specs = [specs.getText().strip() for specs in title]
    # 增加异常判断,避免特殊格式标题导致拆分报错
    brands = []
    model = []
    specifications = []
    for item in all_specs:
        try:
            brands.append(item.split(' ', 1)[0])
            phone_part = item.split(')')[0].split('(')
            model.append(phone_part[0].strip())
            specifications.append(phone_part[1].strip() if len(phone_part)>=2 else '')
        except:
            # 格式异常条目填充占位值,避免采集中断
            brands.append('')
            model.append('')
            specifications.append('')

    s_price_obj = soup.find_all(name = "span", class_ = "a-price-whole")
    selling_price = [price.getText().strip() for price in s_price_obj]
    # 动态长度对齐,避免部分页商品数量不足导致数组错位
    if len(selling_price) < len(all_specs):
        selling_price += ['']*(len(all_specs)-len(selling_price))

    review_obj = soup.find_all(name = "span", class_ = "a-icon-alt")
    review = [ratings.getText().strip() for ratings in review_obj]
    review = review[:len(all_specs)]
    if len(review) < len(all_specs):
        review += ['']*(len(all_specs)-len(review))

    quantity_obj = soup.find_all(name = "span", class_ = "a-size-base")
    quantity_sold = [items.getText().strip() for items in quantity_obj]
    quantity_sold = quantity_sold[:len(all_specs)]
    if len(quantity_sold) < len(all_specs):
        quantity_sold += ['']*(len(all_specs)-len(quantity_sold))

    page_number = [str(page_num)]*len(all_specs)
    current_date = str(date.today())
    Date = [current_date]*len(all_specs)

    # 转为按行存储结构,方便后续转表导出
    page_data = []
    for i in range(len(all_specs)):
        page_data.append({
            '品牌': brands[i],
            '型号': model[i],
            '参数': specifications[i],
            '售价': selling_price[i],
            '评分': review[i],
            '销量': quantity_sold[i],
            '页码': page_number[i],
            '采集日期': Date[i]
        })
    return page_data

多页采集+CSV导出实现流程

total_data = []
for page in range(1,7):
    # 此处替换为你自己的页面加载逻辑:首页直接生成soup,第2-6页调用click()跳转后等待加载完成再生成soup
    page_data = data_collection(soup, page)
    total_data.extend(page_data)

# 导出为CSV文件
df = pd.DataFrame(total_data)
df.to_csv('亚马逊手机采集数据.csv', index=False, encoding='utf-8-sig')

额外优化建议

  • 用Selenium的WebDriverWait显式等待目标元素加载完成再生成soup,避免页面未加载全导致空数据
  • 每次跳转页面后加1-3秒的随机延迟,降低被亚马逊反爬拦截的概率
  • 增加页面跳转、采集的异常重试逻辑,单页采集失败可以重试2-3次再跳过,避免整个流程中断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 13:45:01