【速卖通关键词API接口】Python采集速卖通关键词排名数据

部署运行你感兴趣的模型镜像

要采集速卖通关键词排名数据,核心思路是 模拟浏览器请求 获取搜索结果页面,解析商品信息与排名位置。以下是完整的 Python 实现方案,包含反反爬策略、数据解析和保存功能。

一、核心说明

  1. 反反爬注意事项

    • 速卖通有反爬机制(IP 限制、User-Agent 验证、Cookie 验证),需控制请求频率、使用真实浏览器头。
    • 避免高频次请求,建议添加随机延迟(10-30 秒)。
    • 若需大量采集,建议使用代理 IP 池(免费代理稳定性差,推荐付费代理)。
  2. 技术栈

    • 网络请求:requests(模拟浏览器)
    • 页面解析:BeautifulSoup4(提取商品数据)
    • 数据保存:pandas(保存为 Excel/Csv)

二、完整代码实现

python

运行

import requests
from bs4 import BeautifulSoup
import pandas as pd
import random
import time
from urllib.parse import quote

# -------------------------- 配置参数 --------------------------
KEYWORD = "wireless earbuds"  # 要查询的关键词(可修改)
PAGE_NUM = 3  # 要采集的页数(速卖通默认1页40条商品)
USER_AGENTS = [
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Edge/120.0.0.0 Safari/537.36"
]
PROXY = None  # 代理IP(格式:"http://用户名:密码@IP:端口",无需代理则留None)

# -------------------------- 工具函数 --------------------------
def get_aliexpress_search_url(keyword, page):
    """生成速卖通搜索URL(关键词URL编码,page为页数)"""
    encoded_keyword = quote(keyword)  # 关键词URL编码(处理中文/特殊字符)
    # 速卖通搜索接口(s=gwp 表示全球配送,可根据需求修改参数)
    url = f"https://www.aliexpress.com/wholesale?catId=0&initiative_id=SB_20251124&SearchText={encoded_keyword}&page={page}&s=gwp"
    return url

def send_request(url):
    """发送HTTP请求(带反反爬配置)"""
    headers = {
        "User-Agent": random.choice(USER_AGENTS),
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
        "Accept-Language": "en-US,en;q=0.9",
        "Referer": "https://www.aliexpress.com/",
        "Connection": "keep-alive"
    }
    proxies = {"http": PROXY, "https": PROXY} if PROXY else None
    
    try:
        response = requests.get(
            url, 
            headers=headers, 
            proxies=proxies, 
            timeout=30, 
            allow_redirects=False  # 禁止重定向(避免被反爬跳转)
        )
        response.raise_for_status()  # 抛出HTTP错误(403/404等)
        return response.text
    except requests.exceptions.RequestException as e:
        print(f"请求失败:{e}")
        return None

def parse_product_data(html, page):
    """解析商品数据(排名、标题、价格、销量等)"""
    soup = BeautifulSoup(html, "html.parser")
    products = soup.find_all("div", class_="manhattan--content--1KpBb")  # 商品容器(可能随页面更新)
    data_list = []
    
    for idx, product in enumerate(products):
        # 计算排名(第page页,每页40条,排名= (page-1)*40 + idx+1)
        rank = (page - 1) * 40 + idx + 1
        
        # 商品标题
        title_tag = product.find("h1", class_="manhattan--title--WccSj")
        title = title_tag.get_text(strip=True) if title_tag else "无"
        
        # 商品价格(取最低价格)
        price_tag = product.find("span", class_="manhattan--price-sale--1CCSZ")
        price = price_tag.get_text(strip=True) if price_tag else "无"
        
        # 销量
        sales_tag = product.find("span", class_="manhattan--trade--2Yo05")
        sales = sales_tag.get_text(strip=True) if sales_tag else "0"
        
        # 店铺名称
        shop_tag = product.find("div", class_="manhattan--storeName--2h0tX")
        shop_name = shop_tag.get_text(strip=True) if shop_tag else "无"
        
        # 商品链接
        link_tag = product.find("a", class_="manhattan--container--1lP57")
        link = "https:" + link_tag["href"] if link_tag and "href" in link_tag.attrs else "无"
        
        # 评分(星级)
        rating_tag = product.find("span", class_="manhattan--score--2qRRX")
        rating = rating_tag.get_text(strip=True) if rating_tag else "无"
        
        # 保存数据
        data_list.append({
            "排名": rank,
            "关键词": KEYWORD,
            "商品标题": title,
            "价格": price,
            "销量": sales,
            "店铺名称": shop_name,
            "商品链接": link,
            "评分": rating,
            "页码": page
        })
    
    return data_list

# -------------------------- 主程序 --------------------------
def main():
    all_data = []
    print(f"开始采集速卖通关键词「{KEYWORD}」的排名数据(共{PAGE_NUM}页)...")
    
    for page in range(1, PAGE_NUM + 1):
        # 生成URL
        url = get_aliexpress_search_url(KEYWORD, page)
        print(f"\n正在采集第{page}页:{url}")
        
        # 发送请求
        html = send_request(url)
        if not html:
            print(f"第{page}页采集失败,跳过...")
            time.sleep(random.uniform(15, 25))  # 失败后延迟更久
            continue
        
        # 解析数据
        product_data = parse_product_data(html, page)
        if product_data:
            all_data.extend(product_data)
            print(f"第{page}页采集成功,获取{len(product_data)}条商品数据")
        else:
            print(f"第{page}页未解析到商品数据")
        
        # 随机延迟(避免高频请求被封)
        time.sleep(random.uniform(10, 20))
    
    # 保存数据到Excel
    if all_data:
        df = pd.DataFrame(all_data)
        filename = f"速卖通_{KEYWORD}_排名数据_{time.strftime('%Y%m%d')}.xlsx"
        df.to_excel(filename, index=False, engine="openpyxl")
        print(f"\n采集完成!共获取{len(all_data)}条数据,已保存到:{filename}")
    else:
        print("\n未采集到任何数据!")

if __name__ == "__main__":
    main()

三、使用说明

  1. 安装依赖:先安装所需 Python 库,执行命令:

    bash

    运行

    pip install requests beautifulsoup4 pandas openpyxl
    
  2. 参数配置

    • KEYWORD:修改为需要查询的关键词(支持中文,如 "无线耳机")。
    • PAGE_NUM:需要采集的页数(1 页约 40 条商品)。
    • PROXY:若被速卖通限制 IP,需填写代理(格式:"http://用户名:密码@IP:端口"),无需代理则留None
  3. 运行代码:直接执行脚本,采集完成后会在当前目录生成 Excel 文件(命名格式:速卖通_关键词_排名数据_日期.xlsx)。

四、常见问题解决

  1. 页面结构变化导致解析失败:速卖通可能更新页面 HTML 结构(如商品容器的 class 名),此时需要:

    • 用浏览器打开速卖通搜索页 → 右键「检查」→ 找到商品卡片的 HTML 标签 → 修改代码中find_allclass_参数(如manhattan--content--1KpBb可能变更)。
  2. 403 Forbidden(被反爬)

    • 更换USER_AGENTS中的浏览器头。
    • 降低请求频率(增大time.sleep的延迟时间)。
    • 使用高质量代理 IP(避免使用免费代理)。
    • 清除浏览器 Cookie 后,复制真实 Cookie 到请求头(添加"Cookie": "你的Cookie"headers)。
  3. 中文关键词乱码:代码中已用urllib.parse.quote对关键词进行 URL 编码,直接输入中文即可(如KEYWORD = "无线耳机")。

  4. Excel 保存失败:确保已安装openpyxl库(pip install openpyxl),若仍失败可改为保存为 Csv 格式:

    python

    运行

    df.to_csv(filename.replace(".xlsx", ".csv"), index=False, encoding="utf-8-sig")
    

五、注意事项

  • 本代码仅用于 学习和研究,请勿用于商业用途或高频次采集,避免违反速卖通的《用户协议》。
  • 速卖通的反爬机制会动态更新,若代码失效,需重新分析页面结构并调整解析逻辑。
  • 大量采集建议使用无头浏览器(如seleniumplaywright)模拟真实用户操作,反反爬效果更好,但效率较低。

您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值