返回主页

Shopify 自动化上传

Shopify 批量商品上传系统

从竞品分析到 Shopify 一键上架的全自动商品管道。支持两条路径:通过 Playwright 爬取 Amazon 竞品页面提取产品信息, 或通过 Serper API 增强 SKU 数据。结合 Ollama 本地 LLM 生成 SEO 优化标题与 HTML 描述, 输出标准 Shopify CSV,可直接批量上传数百个商品。

Python Playwright Ollama LLM Serper API Shopify CSV BeautifulSoup Pandas 正则表达式

双路径架构

系统提供两条互补的商品生成路径,可根据业务场景灵活选择:

路径 A shopify1.py — 竞品爬取

输入:competitor_urls.csv(Amazon 等竞品产品页面 URL 列表)

  • Playwright 打开竞品页面,自动提取产品数据
  • 解析标题、价格(正则清洗货币符号)、描述、图片 URL、规格参数
  • Ollama LLM 基于原始数据生成 SEO 优化标题和 HTML 描述
  • 输出完整 Shopify CSV(30+ 标准字段)

适用场景:有明确竞品链接,需要对标分析

路径 B shopify_serper.py — SKU 增强

输入:products_to_update.csv(SKU / 标题 / 描述 表格)

  • Serper API 搜索 Google 获取同类产品上下文信息和图片
  • Ollama LLM 进行三级分类(大类→中类→小类)
  • LLM 生成优化标题和带格式的 HTML 描述
  • 输出 products_for_shopify.csv(含分类、图片、优化文案)

适用场景:已有 SKU 列表,需要搜索增强和分类

路径 A 架构 — 竞品爬取流程

competitor_urls
CSV 输入
Playwright
页面爬取
BS4 解析
数据提取
价格清洗
正则处理
Ollama LLM
SEO 优化
Shopify CSV
30+ 字段输出

路径 B 架构 — SKU 搜索增强流程

SKU 表格
CSV 输入
Serper API
Google 搜索
LLM 分类
三级类目
LLM 标题
SEO 生成
LLM 描述
HTML 生成
Shopify CSV
一键导入

路径 A 执行流程 — shopify1.py

1

读取竞品 URL 列表

从 competitor_urls.csv 中逐行读取 Amazon 产品页面 URL。CSV 格式为单列(每行一个 URL),支持批量输入数十个竞品链接。

2

Playwright 页面爬取 (fetch_product_page)

启动 Chromium 浏览器(headless 模式可配置),访问每个竞品 URL。等待页面加载完成后获取完整 HTML 内容,处理网络超时和反爬拦截。自动等待关键元素渲染以确保动态内容加载。

3

BeautifulSoup 数据提取

使用 BeautifulSoup 解析 HTML,提取:产品标题(#productTitle)、价格(.a-price .a-offscreen,正则 re.sub(r'[^0-9.]', '', price_text) 清洗货币符号)、产品描述(#productDescription)、图片 URL 列表(从 colorImages JSON 中提取 hiRes 链接)、规格参数表(#productDetails_techSpec_section_1 表格解析为 dict)。

4

Ollama LLM 优化 (llm_optimize)

将提取的原始标题、描述、规格组装为 prompt,调用本地 Ollama(llama3.1:8b)生成:(1) SEO 优化的产品标题(英文,含核心关键词,不超过 200 字符);(2) 带 HTML 格式的产品描述(含特性列表、规格表格、使用场景)。通过 HTTP POST 请求 http://localhost:11434/api/generate

5

生成 Handle 与变体字段

基于优化标题生成 URL-friendly Handle(小写 + 连字符),自动填充 Shopify 所需的全部字段:Vendor(店铺名)、Type(产品类型)、Tags(标签)、Option1/2/3 Name/Value(变体属性如 Size/Color/Material)、Variant SKU、Variant Grams、Variant Inventory 系列字段。

6

输出 Shopify CSV (30+ 字段)

将所有产品数据写入标准 Shopify 导入格式 CSV,包含 Handle、Title、Body (HTML)、Vendor、Product Category、Type、Tags、Published、Option 系列、Variant 系列、Image Src/Position/Alt Text、SEO Title/Description、Google Shopping 分类、Status 等 30+ 列。可直接在 Shopify Admin 后台 Products → Import 一键上传。

路径 B 执行流程 — shopify_serper.py

1

读取 SKU 表格

从 products_to_update.csv 读取三列数据:sku(产品编号)、title(原始标题)、description(原始描述)。支持数百行批量处理。

2

Serper Google 搜索 (get_google_context)

用产品标题 + 描述构造搜索查询,调用 Serper API 获取 Google 搜索结果。提取 organic results 前 5 条的标题和摘要作为市场上下文,同时获取 images 前 3 张产品参考图片 URL。

3

LLM 三级分类 (classify_category)

将产品信息 + Google 搜索上下文发送给 Ollama,要求按 Shopify 分类体系进行三级分类:大类(如 Home & Garden)→ 中类(如 Kitchen Storage)→ 小类(如 Food Containers)。返回结构化 JSON。

4

LLM 标题生成 (generate_title)

基于原始标题、描述、搜索上下文和分类结果,LLM 生成符合 Shopify SEO 规范的产品标题:包含核心关键词、材质/尺寸等属性词、控制在 200 字符以内。

5

LLM 描述生成 (generate_description)

LLM 生成带 HTML 格式的产品描述:包含产品特性 <ul> 列表、规格 <table> 表格、使用场景段落。结合搜索上下文确保内容差异化,避免与竞品雷同。

6

输出增强 CSV

写入 products_for_shopify.csv,包含原始 SKU、三级分类、优化后标题、HTML 描述、参考图片 URL 等字段。可进一步转换为 Shopify 标准导入格式。

项目结构

shopify-bulk-upload/ ├── shopify1.py # 路径 A — Playwright 竞品爬取 + LLM 优化 + Shopify CSV ├── shopify_serper.py # 路径 B — Serper 搜索增强 + LLM 分类/标题/描述 ├── competitor_urls.csv # 路径 A 输入 — 竞品产品页面 URL 列表 ├── products_to_update.csv # 路径 B 输入 — SKU/标题/描述 表格 ├── shopify_products.csv # 路径 A 输出 — 标准 Shopify 导入 CSV (30+ 列) ├── products_for_shopify.csv # 路径 B 输出 — 增强后的产品数据 CSV ├── readme.txt # 工作流说明文档 ├── 两个py脚本的区别.txt # 两条路径的对比说明 └── 教程视频.mp4 # 操作教程录屏

核心函数说明

fetch_product_page()

shopify1.py

Playwright 异步函数,启动 Chromium 访问竞品页面,等待动态内容加载后返回完整 HTML。支持 headless 模式切换和超时配置。

数据解析与提取

shopify1.py

BeautifulSoup 解析 Amazon 页面:提取 #productTitle、.a-price(正则清洗 [^0-9.] 保留数字)、#productDescription、colorImages JSON 中的 hiRes 图片、#productDetails 规格表格。

ollama_call()

shopify1.py

封装 Ollama REST API 调用(POST /api/generate),使用 llama3.1:8b 模型,设置 temperature=0.7 保证创意性与稳定性平衡。返回生成的文本内容。

llm_optimize()

shopify1.py

构造 prompt 将产品原始数据发送给 LLM,要求输出 JSON 格式包含 optimized_title 和 html_description。解析 JSON 响应,处理格式异常并兜底回退到原始数据。

get_google_context()

shopify_serper.py

调用 Serper API(POST google.serper.dev/search),获取 Google 搜索结果前 5 条 organic 数据和前 3 张产品图片,为 LLM 提供市场参考上下文。

llm_call()

shopify_serper.py

统一的 Ollama 调用封装层,接受 prompt 和 max_tokens 参数。在 shopify_serper.py 中被分类、标题生成、描述生成三个步骤复用。

classify_category()

shopify_serper.py

三级产品分类:将产品信息 + 搜索上下文发送给 LLM,要求按 Shopify 产品分类体系返回大类/中类/小类。JSON 结构化输出并做基础校验。

process_urls_from_csv() / process_products_from_csv()

shopify1.py / shopify_serper.py

各自的主流程函数:读取输入 CSV → 逐行处理(爬取/搜索 + LLM 优化)→ 收集结果 → 写入输出 CSV。包含进度打印、错误跳过、异常兜底。

Shopify CSV 标准字段 (30+ 列)

shopify1.py 输出完整的 Shopify 产品导入 CSV,以下是核心字段说明:

字段名说明来源
HandleURL 友好的唯一标识符(小写+连字符)自动从标题生成
TitleLLM 优化后的 SEO 标题(≤200 字符)Ollama 生成
Body (HTML)带格式的 HTML 产品描述Ollama 生成
Vendor供应商/品牌名称配置项
Product CategoryShopify 产品分类LLM 分类或手动
Type产品类型标签从竞品数据推断
Tags逗号分隔的搜索标签LLM 提取关键词
Published是否立即发布(TRUE/FALSE)默认 TRUE
Option1/2/3 Name变体属性名称(如 Size, Color, Material)从规格参数提取
Option1/2/3 Value变体属性值从规格参数提取
Variant SKU变体 SKU 编码自动递增生成
Variant Grams变体重量(克)默认值或爬取
Variant Inventory Tracker库存跟踪方式默认 shopify
Variant Inventory Qty库存数量默认 100
Variant Inventory Policy缺货策略(deny/continue)默认 deny
Variant Fulfillment Service发货服务默认 manual
Variant Price售价(清洗后的纯数字)正则提取竞品价格
Variant Compare At Price原价/划线价自动设为售价 ×1.3
Variant Requires Shipping是否需要运费默认 TRUE
Variant Taxable是否征税默认 TRUE
Image Src主图 URL爬取竞品 hiRes 图片
Image Position图片排序位置自动递增
Image Alt Text图片 ALT 文本自动从标题生成
SEO TitleSEO 页面标题同 Title
SEO DescriptionSEO 元描述LLM 摘要生成
Google Shopping / Google Product CategoryGoogle 商品分类LLM 映射
Status产品状态(active/draft)默认 active

Ollama LLM 集成

调用方式

# shopify1.py — 直接 HTTP 请求 import requests def ollama_call(prompt, model="llama3.1:8b"): response = requests.post( "http://localhost:11434/api/generate", json={ "model": model, "prompt": prompt, "stream": False, "options": {"temperature": 0.7} } ) return response.json()["response"]

Prompt 工程示例(SEO 标题生成)

# 路径 A — 基于竞品数据的优化 prompt prompt = f"""You are an e-commerce SEO expert. Given the following product information, generate an optimized Shopify product title that: - Contains core keywords - Includes material/size attributes - Is under 200 characters - Follows Amazon/Shopify best practices Original Title: {title} Description: {description} Specifications: {specs} Return ONLY a JSON object: {{"optimized_title": "...", "html_description": "..."}} """

路径 B 的 LLM 调用链

# shopify_serper.py — 三次 LLM 调用/产品 # 1. 三级分类 category = classify_category(title, description, google_context) # → {"level1": "Home & Garden", "level2": "Kitchen", "level3": "Storage"} # 2. SEO 标题 optimized_title = generate_title(title, description, category, google_context) # → "Premium Aluminum Foil Containers with Lids - 50 Pack..." # 3. HTML 描述 html_desc = generate_description(title, description, category, google_context) # → "<h3>Features</h3><ul><li>...</li></ul>..."

本地运行优势:使用 Ollama + llama3.1:8b 完全本地运行,无需付费 API。每产品 3 次 LLM 调用(分类 + 标题 + 描述),处理数百个商品无额外成本。temperature=0.7 在创意性和稳定性之间取得平衡。

配置说明

配置项路径说明
Ollama 地址必需 A + B 默认 http://localhost:11434,确保 Ollama 已启动并拉取 llama3.1:8b
SERPER_API_KEY路径B B Serper API 密钥(serper.dev 注册获取),用于 Google 搜索
模型名称可调 A + B 默认 llama3.1:8b,可替换为 mistral、codellama 等
Headless 模式可调 A Playwright 浏览器是否无头运行(调试时建议关闭以观察)
temperature可调 A + B LLM 温度参数,默认 0.7。降低更稳定,升高更有创意
Vendor 名称可调 A Shopify CSV 中的供应商字段,默认值可在代码中修改

部署与使用指南

1. 安装依赖

pip install playwright beautifulsoup4 requests pandas # 安装 Playwright 浏览器(首次需要) playwright install chromium

2. 启动 Ollama

# 确保 Ollama 已安装 ollama pull llama3.1:8b ollama serve # 验证 Ollama 是否正常运行 curl http://localhost:11434/api/tags

3. 准备输入数据

# 路径 A — 创建 competitor_urls.csv # 每行一个 Amazon 产品 URL https://www.amazon.com/dp/B0XXXXXXXX https://www.amazon.com/dp/B0YYYYYYYY # 路径 B — 创建 products_to_update.csv # 包含 sku, title, description 三列 sku,title,description SKU001,Aluminum Foil Container,Pack of 50 disposable containers SKU002,Plastic Food Storage Set,BPA free containers with lids

4. 运行脚本

# 路径 A — 竞品爬取 + LLM 优化 + Shopify CSV python shopify1.py # 路径 B — SKU 搜索增强 + LLM 分类/生成 python shopify_serper.py

5. 上传到 Shopify

# 1. 登录 Shopify Admin 后台 # 2. 进入 Products → Import # 3. 选择生成的 shopify_products.csv(路径 A) # 或 products_for_shopify.csv(路径 B) # 4. 点击 Upload file → 确认映射 → Import # 5. 数百个商品将自动创建到店铺中

依赖清单:playwright, beautifulsoup4, requests, pandas(路径 A);额外需 requests(路径 B,serper API 调用)。无 FastAPI/Web 服务器,纯脚本运行。

批量处理提示:shopify1.py 逐 URL 处理,适合 10-50 个竞品分析;shopify_serper.py 批量处理 CSV 所有行,适合 100-500+ 个 SKU 的快速生成。可根据业务规模选择路径。

Amazon 反爬注意:路径 A 使用 Playwright 真实浏览器访问 Amazon,建议:(1) 控制访问频率避免触发 CAPTCHA;(2) headless=false 方便调试观察;(3) 若被封 IP,可切换代理或等待后重试。