在价格战里,手速就是利润
兄弟们,在这个“内卷”的时代,信息差就是钱。
- 做电商的:竞品凌晨 3 点把价格调低了 5 块钱,你第二天早上才发现,流量全跑了。
- 想买大件的:显卡/手机价格像过山车,你总是在山顶站岗,错过史低价。
以前我们用 Python 写爬虫,最头疼的是什么? 是写 XPath 和正则! 网站前端随便改个 Class 名,爬虫就挂了,还得连夜修代码。
今天,我们换个玩法。
我们要用Python + Playwright(浏览器自动化)+ AI Agent(智能提取)这一套组合拳
️ 核心思路:Agent 的“鹰眼”系统
- 眼睛(剧作家):打开网页,截取核心区域的文本或 HTML。
- 大脑(LLM - DeepSeek/OpenAI):从乱七八糟的代码中精准提取“当前价格”、“优惠券”和“库存状态”。
- 嘴巴(通知):发现价格低于设定值,或者检测到“价格跳水”,立刻报警。
依赖安装:
pip install playwright langchain langchain-openai scheduleplaywright install # 安装浏览器内核 实战代码:打造“价格狙击手”
我们跳过复杂的类封装,直接上最核心的“AI 智能解析”逻辑。 哪怕网站改版,只要价格还在页面上,AI 就能认出来!
import timeimport schedulefrom playwright.sync_api import sync_playwrightfrom langchain_openai import ChatOpenAIfrom langchain.prompts import promptTemplate# === 1. 配置区域 ===# 目标商品链接 (这里以某电商链接为例)TARGET_URL = "https://www.example.com/product/iphone-16-pro"# 你的心理预期价位TARGET_PRICE = 7999 # 配置 LLM (推荐用 DeepSeek V3 或 GPT-4o-mini,便宜快)llm = ChatOpenAI( model="deepseek-chat", api_key="sk-xxxxxx", base_url="https://api.deepseek.com", temperature=0)# === 2. 获取网页内容的函数 (眼睛) ===def fetch_page_content(url): with sync_playwright() as p: # 启动无头浏览器 browser = p.chromium.launch(headless=True) page = browser.new_page() # 伪装成正常用户 page.set_extra_http_headers({"User-Agent": "Mozilla/5.0..."}) print(f"️ 正在潜入页面: {url} ...") page.goto(url, wait_until="domcontentloaded") time.sleep(3) # 等待动态内容加载 # 这里有个骚操作:只获取 body 的文本,或者特定区域的 HTML # 我们可以去掉 script 和 style 标签,节省 Token content = page.evaluate("""() => { return document.body.innerText; }""") browser.close() return content[:5000] # 截取前 5000 字符防止 Token 爆炸# === 3. AI 智能分析 (大脑) ===def analyze_price(content): prompt = promptTemplate.from_template(""" 你是一个电商价格分析专家。下面是网页的原始文本内容: {raw_text} 请从中提取以下信息: 1. 商品名称 2. 当前价格 (提取纯数字) 3. 库存状态 (有货/无货) 并根据价格判断: 如果价格 <= {target_price},返回 "BUY";否则返回 "WAIT"。 请以 JSON 格式返回,例如: {{"name": "iPhone 16", "price": 8999, "status": "In Stock", "action": "WAIT"}} """) chain = prompt | llm print(" AI 正在分析价格数据...") response = chain.invoke({"raw_text": content, "target_price": TARGET_PRICE}) return response.content# === 4. 主任务逻辑 ===def job(): try: # 1. 抓取 raw_text = fetch_page_content(TARGET_URL) # 2. 分析 result_json = analyze_price(raw_text) print(f" 分析结果: {result_json}") # 3. 这里的 result_json 是字符串,实际使用可以用 json.loads 转字典 if "BUY" in result_json: print(" 价格达到预期!立即下单!发送报警!") # 这里调用发送邮件/钉钉/微信的代码 else: print(" 价格还没到位,继续蹲守...") except Exception as e: print(f"❌ 出错啦: {e}")# === 5. 定时执行 ===# 每 30 分钟检查一次schedule.every(30).minutes.do(job)print(" 价格监控 Agent 已启动")job() # 先跑一次试试while True: schedule.run_pending() time.sleep(1) 为什么这个方案比传统爬虫强?
大家看这一段 prompt(提示词):
"从中提取... 当前价格 (提取纯数字)..."
这就是降维打击。
- 传统爬虫:你必须写P-box-V3 。 明天网站只要把 soup.find('div', class_='price-box-v2')价格框-V2 改成 ,你的爬虫就瞎了。
- 人工智能代理:它读的是文本语义。 不管前端怎么改 Class,只要人类能看懂那是价格,AI 就能看懂。极大地降低了维护成本!
进阶玩法:加上“趋势分析”
光看当前价格还不够,我们要让 AI 帮我们做决策
我们可以把每次抓取的价格存入 CSV 文件,然后让 Agent 结合历史数据进行分析:
Agent 的思考逻辑(prompt):
“这是该商品过去 7 天的价格数据:[99, 98, 99, 95, 80, 80, 85]。今天的价格是 85。请分析:这是反弹趋势吗?现在适合入手吗?还是应该再等等?” AI 会回答你:
“⚠️ 警告:虽然今天比上周便宜,但对比昨天的 80 元已经反弹 5 元,建议观察是否会回落,暂不建议追高。”
这才是真正的私人理财顾问
