本文将构建一套基于Python的自动化工具,用于解决无货源电商模式中核心的“商品采集”与“精细化定价”问题。该工具将自动抓取上游供应商(以1688为例)的商品数据,根据预设的算法计算出售价,并生成符合上架要求的Excel表格。技术栈选用Python 3.9+,结合requests进行网络请求,BeautifulSoup4解析HTML,pandas处理数据。
在开始编写代码前,需要确保本地已配置好Python环境,并安装必要的第三方库。请打开终端(Terminal或CMD),依次执行以下命令。
1. 安装核心依赖库
执行以下命令安装所需库,requests用于发送HTTP请求,bs4用于解析网页,pandas和openpyxl用于处理Excel文件,fake_useragent用于生成随机User-Agent以防止被反爬。
```bash pip install requests beautifulsoup4 pandas openpyxl fake_useragent lxml ```创建一个名为product_spider.py的文件。我们需要编写一个函数,能够传入商品详情页URL,返回商品的标题、价格和主图链接。为了确保请求的稳定性,我们需要在请求头中伪装浏览器特征。
1. 定义请求头与初始化
在代码中引入必要的库,并设置一个基础的请求头模板。注意,这里使用fake_useragent动态生成UA。
```python import requests from bs4 import BeautifulSoup from fake_useragent import UserAgent import time import random ua = UserAgent() def get_headers(): return { 'User-Agent': ua.random, 'Referer': 'https://www.1688.com/', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8', 'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2', } ```2. 实现核心抓取函数
以下函数实现了对1688商品详情页的抓取逻辑。考虑到网页结构可能微调,这里采用了通用的class属性定位。如果遇到网络波动,加入了重试机制。
```python def fetch_product_info(url): max_retries = 3 for attempt in range(max_retries): try: response = requests.get(url, headers=get_headers(), timeout=10) if response.status_code == 200: soup = BeautifulSoup(response.text, 'lxml') 提取标题 - 适配常见的详情页结构 title_tag = soup.find('h1', class_='d-title') or soup.find('span', class_='obj-title') title = title_tag.get_text(strip=True) if title_tag else "无标题" 提取价格 - 优先获取区间价 price_tag = soup.find('span', class_='value') or soup.find('div', class_='price-val') 处理价格符号,只保留数字和小数点 price_text = price_tag.get_text(strip=True) if price_tag else "0.00" price = float(''.join(filter(lambda x: x.isdigit() or x == '.', price_text))) 提取主图 img_tag = soup.find('img', class_='obj-img') or soup.find('div', class_='desc-img-loaded').find('img') if soup.find('div', class_='desc-img-loaded') else None image_url = img_tag.get('src') if img_tag else "" return { 'title': title, 'cost_price': price, 'image': image_url, 'source_url': url } else: print(f"请求失败,状态码: {response.status_code}") except Exception as e: print(f"尝试 {attempt + 1} 失败: {e}") time.sleep(random.uniform(1, 2)) return None ```无货源模式的核心利润在于定价策略。我们需要编写一个算法,综合考虑采购成本、物流模板、平台佣金以及预期的利润率。为了提高转化率,通常会对价格进行“尾数处理”(如9.9元而非10元)。
1. 定价逻辑实现
在product_spider.py中继续添加以下定价函数。该算法支持设置基础利润率和不同价格区间的加价幅度。
```python def calculate_selling_price(cost_price, profit_rate=0.3, shipping_fee=0): """ 计算售价 :param cost_price: 采购成本 :param profit_rate: 利润率 (例如 0.3 代表 30%) :param shipping_fee: 预估物流费用 :return: 最终售价 """ 基础售价 = 成本 / (1 - 利润率) + 物流费 公式解释:假设售价为S,成本为C,利润为P。则 S = C + SP + Fee => S(1-P) = C + Fee => S = (C+Fee)/(1-P) 这里为了简化无货源逻辑,直接采用成本加成法,并覆盖运费 raw_price = cost_price (1 + profit_rate) + shipping_fee 心理定价策略:尾数处理为 .99 或 .9 if raw_price < 50: 低价商品,处理为 .9 final_price = int(raw_price) + 0.9 else: 高价商品,处理为 .99 final_price = int(raw_price 10 - 0.01) / 10.0 保留两位小数 return round(final_price, 2) ```
有了单品的抓取和定价能力,接下来需要处理批量URL。我们将创建一个主流程,读取一个包含商品链接的文本文件,逐个处理,最后导出结果。
1. 创建数据源文件
在同级目录下创建一个名为urls.txt的文件,每行放入一个上游商品链接,例如:
```text https://detail.1688.com/offer/xxxxx.html https://detail.1688.com/offer/yyyyy.html ```2. 编写主执行逻辑
继续在文件中添加主函数,使用pandas将结果整理为标准的上架表格。
```python import pandas as pd def main(): input_file = 'urls.txt' output_file = 'products_to_upload.xlsx' results = [] try: with open(input_file, 'r', encoding='utf-8') as f: urls = [line.strip() for line in f if line.strip()] except FileNotFoundError: print(f"未找到 {input_file},请先创建该文件并填入链接") return print(f"开始处理 {len(urls)} 个商品链接...") for index, url in enumerate(urls): print(f"正在处理第 {index + 1} 个...") data = fetch_product_info(url) if data: 应用定价算法 假设我们设置30%的利润率,基础运费补贴为5元 sell_price = calculate_selling_price(data['cost_price'], profit_rate=0.3, shipping_fee=5.0) 构建上架数据行 row = { '商品标题': data['title'], '采购价': data['cost_price'], '建议售价': sell_price, '利润': round(sell_price - data['cost_price'] - 5.0, 2), 售价 - 成本 - 运费 '主图链接': data['image'], '源链接': data['source_url'] } results.append(row) else: print(f"该链接获取失败: {url}") 随机延时,礼貌爬取 time.sleep(random.uniform(2, 4)) 导出Excel if results: df = pd.DataFrame(results) 使用 openpyxl 引擎,确保格式兼容 df.to_excel(output_file, index=False, engine='openpyxl') print(f"处理完成!结果已保存至 {output_file}") else: print("未获取到任何有效数据。") if __name__ == '__main__': main() ```确保上述所有代码片段都在同一个product_spider.py文件中,并且顺序正确(引入库 -> 函数定义 -> main函数)。完整的文件结构应如下所示:
```python import requests from bs4 import BeautifulSoup from fake_useragent import UserAgent import time import random import pandas as pd ... (此处插入上文定义的所有函数代码: get_headers, fetch_product_info, calculate_selling_price, main) ... ```执行脚本
在终端中运行以下命令启动程序:
```bash python product_spider.py ```运行结束后,目录下会生成products_to_upload.xlsx。打开该文件,你将看到包含商品标题、自动计算后的建议售价、利润预估等完整信息的表格。你可以直接将此表格导入到ERP系统或电商后台进行批量上架。
为了实现“精细化运营”中的定时监控与调价,可以将脚本设置为每天自动运行一次。这里提供Linux (Crontab) 和 Windows (Task Scheduler) 的配置方法。
1. Linux/Mac 配置 (Crontab)
在终端输入 crontab -e,添加以下一行,设置每天早上9点运行一次:
```bash 0 9 /usr/bin/python3 /你的脚本绝对路径/product_spider.py >> /你的日志路径/log.txt 2>&1 ```2. Windows 配置 (任务计划程序)
易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。
Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图