Shopify 自动化上传
从竞品分析到 Shopify 一键上架的全自动商品管道。支持两条路径:通过 Playwright 爬取 Amazon 竞品页面提取产品信息, 或通过 Serper API 增强 SKU 数据。结合 Ollama 本地 LLM 生成 SEO 优化标题与 HTML 描述, 输出标准 Shopify CSV,可直接批量上传数百个商品。
系统提供两条互补的商品生成路径,可根据业务场景灵活选择:
输入:competitor_urls.csv(Amazon 等竞品产品页面 URL 列表)
适用场景:有明确竞品链接,需要对标分析
输入:products_to_update.csv(SKU / 标题 / 描述 表格)
适用场景:已有 SKU 列表,需要搜索增强和分类
从 competitor_urls.csv 中逐行读取 Amazon 产品页面 URL。CSV 格式为单列(每行一个 URL),支持批量输入数十个竞品链接。
启动 Chromium 浏览器(headless 模式可配置),访问每个竞品 URL。等待页面加载完成后获取完整 HTML 内容,处理网络超时和反爬拦截。自动等待关键元素渲染以确保动态内容加载。
使用 BeautifulSoup 解析 HTML,提取:产品标题(#productTitle)、价格(.a-price .a-offscreen,正则 re.sub(r'[^0-9.]', '', price_text) 清洗货币符号)、产品描述(#productDescription)、图片 URL 列表(从 colorImages JSON 中提取 hiRes 链接)、规格参数表(#productDetails_techSpec_section_1 表格解析为 dict)。
将提取的原始标题、描述、规格组装为 prompt,调用本地 Ollama(llama3.1:8b)生成:(1) SEO 优化的产品标题(英文,含核心关键词,不超过 200 字符);(2) 带 HTML 格式的产品描述(含特性列表、规格表格、使用场景)。通过 HTTP POST 请求 http://localhost:11434/api/generate。
基于优化标题生成 URL-friendly Handle(小写 + 连字符),自动填充 Shopify 所需的全部字段:Vendor(店铺名)、Type(产品类型)、Tags(标签)、Option1/2/3 Name/Value(变体属性如 Size/Color/Material)、Variant SKU、Variant Grams、Variant Inventory 系列字段。
将所有产品数据写入标准 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 一键上传。
从 products_to_update.csv 读取三列数据:sku(产品编号)、title(原始标题)、description(原始描述)。支持数百行批量处理。
用产品标题 + 描述构造搜索查询,调用 Serper API 获取 Google 搜索结果。提取 organic results 前 5 条的标题和摘要作为市场上下文,同时获取 images 前 3 张产品参考图片 URL。
将产品信息 + Google 搜索上下文发送给 Ollama,要求按 Shopify 分类体系进行三级分类:大类(如 Home & Garden)→ 中类(如 Kitchen Storage)→ 小类(如 Food Containers)。返回结构化 JSON。
基于原始标题、描述、搜索上下文和分类结果,LLM 生成符合 Shopify SEO 规范的产品标题:包含核心关键词、材质/尺寸等属性词、控制在 200 字符以内。
LLM 生成带 HTML 格式的产品描述:包含产品特性 <ul> 列表、规格 <table> 表格、使用场景段落。结合搜索上下文确保内容差异化,避免与竞品雷同。
写入 products_for_shopify.csv,包含原始 SKU、三级分类、优化后标题、HTML 描述、参考图片 URL 等字段。可进一步转换为 Shopify 标准导入格式。
Playwright 异步函数,启动 Chromium 访问竞品页面,等待动态内容加载后返回完整 HTML。支持 headless 模式切换和超时配置。
BeautifulSoup 解析 Amazon 页面:提取 #productTitle、.a-price(正则清洗 [^0-9.] 保留数字)、#productDescription、colorImages JSON 中的 hiRes 图片、#productDetails 规格表格。
封装 Ollama REST API 调用(POST /api/generate),使用 llama3.1:8b 模型,设置 temperature=0.7 保证创意性与稳定性平衡。返回生成的文本内容。
构造 prompt 将产品原始数据发送给 LLM,要求输出 JSON 格式包含 optimized_title 和 html_description。解析 JSON 响应,处理格式异常并兜底回退到原始数据。
调用 Serper API(POST google.serper.dev/search),获取 Google 搜索结果前 5 条 organic 数据和前 3 张产品图片,为 LLM 提供市场参考上下文。
统一的 Ollama 调用封装层,接受 prompt 和 max_tokens 参数。在 shopify_serper.py 中被分类、标题生成、描述生成三个步骤复用。
三级产品分类:将产品信息 + 搜索上下文发送给 LLM,要求按 Shopify 产品分类体系返回大类/中类/小类。JSON 结构化输出并做基础校验。
各自的主流程函数:读取输入 CSV → 逐行处理(爬取/搜索 + LLM 优化)→ 收集结果 → 写入输出 CSV。包含进度打印、错误跳过、异常兜底。
shopify1.py 输出完整的 Shopify 产品导入 CSV,以下是核心字段说明:
| 字段名 | 说明 | 来源 |
|---|---|---|
Handle | URL 友好的唯一标识符(小写+连字符) | 自动从标题生成 |
Title | LLM 优化后的 SEO 标题(≤200 字符) | Ollama 生成 |
Body (HTML) | 带格式的 HTML 产品描述 | Ollama 生成 |
Vendor | 供应商/品牌名称 | 配置项 |
Product Category | Shopify 产品分类 | 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 Title | SEO 页面标题 | 同 Title |
SEO Description | SEO 元描述 | LLM 摘要生成 |
Google Shopping / Google Product Category | Google 商品分类 | LLM 映射 |
Status | 产品状态(active/draft) | 默认 active |
本地运行优势:使用 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 中的供应商字段,默认值可在代码中修改 |
依赖清单: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,可切换代理或等待后重试。