本次选择低门槛开源电商框架:WordPress+WooCommerce(80%独立站常用,零代码可快速搭基础站,丰富插件覆盖需求),配合Python脚本做标签采集计算,无需额外后端开发框架成本
pip install requests pandas numpy
先做3类核心标签:基础属性、行为属性、价值属性,标签值预设可覆盖80%基础运营场景

以下是可直接复制的脚本,替换预留参数即可运行
import requests
import pandas as pd
import numpy as np
from datetime import datetime, timedelta
================== 替换预留参数 ==================
CONSUMER_KEY = "替换你的Consumer Key"
CONSUMER_SECRET = "替换你的Consumer Secret"
STORE_URL = "替换你的独立站完整地址(不带结尾的/)"
==================================================
def get_woocommerce_data(endpoint, params=None):
url = f"{STORE_URL}/wp-json/wc/v3/{endpoint}"
response = requests.get(url, auth=(CONSUMER_KEY, CONSUMER_SECRET), params=params)
if response.status_code == 200:
return response.json()
else:
print(f"请求失败:{response.status_code} - {response.text}")
return []
1. 采集基础属性、订单数据
customers = get_woocommerce_data("customers", params={"per_page": 100})
orders = get_woocommerce_data("orders", params={"per_page": 100, "status": "completed"})
2. 整理数据为DataFrame
df_customers = pd.DataFrame(customers)
df_orders = pd.DataFrame(orders)
3. 计算标签
def calculate_tags(row):
初始化标签
tags = []
3.1 基础属性:性别(从收货地址/账单地址推测)
gender = "未知"
if pd.notna(row.get("billing", {}).get("first_name")) and pd.notna(row.get("billing", {}).get("last_name")):
full_name = f"{row['billing']['first_name']}{row['billing']['last_name']}"
简单性别推测(仅中文姓名,英文可加第三方API,但本次零门槛)
male_keywords = ["伟", "强", "军", "杰", "涛"]
female_keywords = ["芳", "丽", "娜", "婷", "霞"]
for kw in male_keywords:
if kw in full_name:
gender = "男"
break
if gender == "未知":
for kw in female_keywords:
if kw in full_name:
gender = "女"
break
tags.append(f"性别:{gender}")
3.2 基础属性:年龄段(本次仅计算身份证生日,没有生日数据默认未知)
age_tag = "未知"
if pd.notna(row.get("billing", {}).get("birthday")):
birthday = datetime.strptime(row["billing"]["birthday"], "%Y-%m-%d")
today = datetime.today()
age = today.year - birthday.year - ((today.month, today.day) < (birthday.month, birthday.day))
if 18 <= age <25:
age_tag = "18-24"
elif 25 <= age <35:
age_tag = "25-34"
elif 35 <= age <45:
age_tag = "35-44"
elif age >=45:
age_tag = "45+"
tags.append(f"年龄段:{age_tag}")
3.3 基础属性:来源渠道(WooCommerce默认无记录,需后续安装插件,但本次用注册后第一笔订单备注)
注:建议后续安装「Customer Source for WooCommerce」插件完善来源,本次跳过
3.4 价值属性:累计消费金额区间
total_spent = float(row.get("total_spent", 0))
if total_spent == 0:
spend_tag = "0"
elif 0 < total_spent <100:
spend_tag = "0-99"
elif 100 <= total_spent <500:
spend_tag = "100-499"
elif 500 <= total_spent <1000:
spend_tag = "500-999"
else:
spend_tag = "1000+"
tags.append(f"累计消费:{spend_tag}")
3.5 价值属性:累计订单数
order_count = int(row.get("orders_count", 0))
repurchase_tag = "0次复购"
if order_count == 2:
repurchase_tag = "1-2次复购"
elif order_count >=3:
repurchase_tag = "3+次复购"
tags.append(f"复购:{repurchase_tag}")
return ", ".join(tags)
df_customers["user_tags"] = df_customers.apply(calculate_tags, axis=1)
4. 将标签更新到WooCommerce后台
for index, row in df_customers.iterrows():
customer_id = row["id"]
existing_meta = get_woocommerce_data(f"customers/{customer_id}/meta_data")
检查是否已有自定义标签字段,有则覆盖,无则新增
existing_tag_id = None
for meta in existing_meta:
if meta["key"] == "user_custom_tags":
existing_tag_id = meta["id"]
break
更新标签
meta_data = {"key": "user_custom_tags", "value": row["user_tags"]}
if existing_tag_id:
覆盖
requests.post(
f"{STORE_URL}/wp-json/wc/v3/customers/{customer_id}/meta_data/{existing_tag_id}",
auth=(CONSUMER_KEY, CONSUMER_SECRET),
json=meta_data
)
else:
新增
requests.post(
f"{STORE_URL}/wp-json/wc/v3/customers/{customer_id}/meta_data",
auth=(CONSUMER_KEY, CONSUMER_SECRET),
json=meta_data
)
print(f"已完成{len(df_customers)}位用户的标签更新!")
python wc_tag_calculator.py
使用WordPress后台自带插件「MailPoet」(免费版足够覆盖基础场景,与WooCommerce深度集成)
下一篇: 商城客户
易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。
Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图