每周一上午,3小时47分钟,23个竞品页面,手动复制粘贴价格。这是某个跨境电商小老板的周一固定节目,持续了整整8个月。
直到他算了笔账:按时薪换算,每年光比价就要烧掉近4000美元。更扎心的是,这种重复劳动对业务增长零贡献。
他决定写个Python脚本。想法很简单:抓HTML、解析价格、存进表格,完事。
理想很丰满:3行代码的幻觉
起手就是标准模板。requests(请求库)拉页面,BeautifulSoup(网页解析库)找价格标签,提取文本。代码看起来人畜无害:
import requests from bs4 import BeautifulSoup url = "https://example.com/product/123" response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') price = soup.find('span', class_='price').text
跑了3个小站点,一切正常。他以为问题解决了。
第4个站点是亚马逊。脚本返回403禁止访问。换IP,封。加请求头,封。放慢频率,还是封。亚马逊的反爬系统像一堵会学习的墙,他的代码像个拿着小锤子的装修工。
「我以为自己能打败亚马逊的机器人检测。我做不到。」他在复盘里写道。
转向eBay,同样结局。这些平台每年花数千万美元养安全团队,他的周末项目拿什么打?
回到手动检查。更烦了。
现实很骨感:分层策略才走得通
最终方案是分而治之。大平台和小站点,两套打法。
亚马逊、eBay这类头部站点,他放弃自建爬虫,转而调用现成API。ParseForge这类服务已经处理好代理轮换、指纹伪装、验证码绕过。他评估过:自己从头搭建同等能力的系统,保守估计要投入一周全职开发,还没算后续维护。
小站点则继续用基础方案。requests+BeautifulSoup足够,因为这些站点要么没有反爬,要么防护形同虚设。
存储方案他也做了减法。最初想过上PostgreSQL,后来算了笔数据量:每周23个产品,一年也就1200行。CSV直接用Excel打开,团队里谁都能看,何必折腾数据库?
最终脚本结构很务实:
import csv import requests from datetime import datetime # 小站点:基础抓取 def get_basic_price(url, selector): try: response = requests.get(url, headers={'User-Agent': 'Mozilla/5.0'}) soup = BeautifulSoup(response.text, 'html.parser') price_text = soup.select_one(selector).text # 清洗:"$19.99" → 19.99 return float(price_text.replace('$', '').replace(',', '').strip()) except: return None # 亚马逊/大站点:调用API def get_amazon_price(product_id): # 此处调用爬虫API # 返回结构化数据(价格、标题、评分等) pass # 每周执行 products = [ {'name': 'Widget A', 'url': 'https://smallsite.com/widget-a', 'selector': '.price'}, {'name': 'Widget B', 'asin': 'B08XYZ123', 'platform': 'amazon'}, ] results = [] for product in products: if 'asin' in product: price = get_amazon_price(product['asin']) else: price = get_basic_price(product['url'], product['selector']) results.append({ 'product': product['name'], 'price': price, 'date': datetime.now().strftime('%Y-%m-%d'), }) # 追加到CSV with open('competitor_prices.csv', 'a', newline='') as f: writer = csv.DictWriter(f, fieldnames=['product', 'price', 'date']) writer.writerows(results)
现在每周一由cron定时任务自动执行。47秒跑完,以前是3小时47分钟。时间成本从每周固定损耗,变成几乎可以忽略的背景噪音。
能用的自动化,都长什么样
这个案例有几个反直觉的细节。
第一,别和巨头硬碰硬。亚马逊每年拦截数十亿次爬虫请求,他们的反爬系统会学习、进化、联动。个人开发者的时间应该花在业务逻辑上,而不是和对方的SRE团队军备竞赛。调用现成API不是偷懒,是资源最优配置。
第二,错误处理比抓取逻辑更重要。价格抓取失败时,脚本返回None而不是崩溃。这意味着某个站点改版或临时故障不会中断整个流程。他后来补充了邮件通知,失败时自动告警,但流程继续。
第三,数据存储要匹配使用场景。1200行/年的数据量,CSV足够。团队里非技术人员能直接打开,比搭个数据库再写查询接口实用得多。技术选型常被过度工程化,他这次算是克制住了。
这个脚本现在跑了一年多。竞品价格变动趋势在Excel里一目了然,他据此调整了两次定价策略,多赚的毛利远超当初投入的开发时间。
但有个问题他没解决:当竞争对手也开始自动化比价,价格战会不会变成算法互搏?到那时,47秒的脚本还够用吗?
热门跟贴