《实战!用Scrapy+Flask构建京东商品比价微信机器人》

简介: 本项目基于Scrapy+Flask+微信(itchat)构建京东商品比价机器人,支持用户微信输入商品名/链接,自动爬取京东等平台价格、历史低价与比价结果并实时推送。含完整架构、代码示例及部署指南,兼顾实用性与可扩展性。(239字)

这个主题非常实用,结合了爬虫技术(Scrapy)、后端服务(Flask)和即时通讯工具(微信),非常适合用来构建一个自动化的商品价格监控系统。下面我将为你提供一个完整的实战指南,帮助你一步步实现《用Scrapy+Flask构建京东商品比价微信机器人》。

📌 项目目标:

开发一个微信机器人,用户输入商品名称或链接,机器人自动返回该商品在京东上的历史最低价、当前价,并与淘宝/拼多多等平台进行比价,最终将结果推送到用户微信。

一、技术架构概览

用户(微信)
  ↓
WeChaty / itchat(微信接入)
  ↓
Flask API 服务(接收请求,调用爬虫)
  ↓
Scrapy 爬虫(爬取京东商品数据)
  ↓
数据存储(MySQL / MongoDB + Redis缓存)
  ↓
返回比价结果 → 微信回复用户

二、环境准备

  1. 安装依赖

Python 3.8+

pip install scrapy flask pymysql redis requests itchat

  1. 创建项目结构

jd_price_bot/
├── scrapy_project/
│ └── jd_spider/
│ ├── spiders/
│ │ └── jd.py
│ ├── items.py
│ └── pipelines.py
├── app.py # Flask 主程序
├── wechat_bot.py # 微信接入模块
├── requirements.txt
└── config.py # 配置文件(数据库、Redis等)

三、Step 1:使用 Scrapy 爬取京东商品数据

  1. 创建 Scrapy 项目

scrapy startproject scrapy_project
cd scrapy_project
scrapy genspider jd jd.com

  1. 编写 jd.py 爬虫(简化版)

import scrapy
from scrapy_project.items import JdItem

class JdSpider(scrapy.Spider):
name = 'jd'
allowed_domains = ['jd.com']
custom_settings = {
'DOWNLOAD_DELAY': 2,
'DEFAULT_REQUEST_HEADERS': {
'User-Agent': 'Mozilla/5.0 ...',
'Referer': 'https://www.jd.com'
}
}

def start_requests(self):
    keyword = getattr(self, 'keyword', 'iPhone 15')
    url = f'https://search.jd.com/Search?keyword={keyword}'
    yield scrapy.Request(url=url, callback=self.parse)

def parse(self, response):
    for item in response.css('li.gl-item'):
        product = JdItem()
        product['name'] = item.css('.p-name em::text').getall()
        product['price'] = item.css('.p-price i::text').get()
        product['link'] = response.urljoin(item.css('.p-name a::attr(href)').get())
        product['image'] = item.css('.p-img img::attr(data-lazy-img)').get()
        yield product
  1. 定义 Item(items.py)

import scrapy

class JdItem(scrapy.Item):
name = scrapy.Field()
price = scrapy.Field()
link = scrapy.Field()
image = scrapy.Field()

  1. 配置 Pipeline 存储到 MySQL 或 MongoDB

pipelines.py(示例:存入MongoDB)

import pymongo

class MongoPipeline:
def init(self, mongo_uri, mongo_db):
self.mongo_uri = mongo_uri
self.mongo_db = mongo_db

@classmethod
def from_crawler(cls, crawler):
    return cls(
        mongo_uri=crawler.settings.get('MONGO_URI'),
        mongo_db=crawler.settings.get('MONGO_DATABASE', 'jd_data')
    )

def open_spider(self, spider):
    self.client = pymongo.MongoClient(self.mongo_uri)
    self.db = self.client[self.mongo_db]

def close_spider(self, spider):
    self.client.close()

def process_item(self, item, spider):
    self.db['products'].insert_one(dict(item))
    return item
  1. 启用 Pipeline(settings.py)

ITEM_PIPELINES = {
'scrapy_project.pipelines.MongoPipeline': 300,
}
MONGO_URI = 'mongodb://localhost:27017'
MONGO_DATABASE = 'jd_data'

四、Step 2:使用 Flask 提供 API 接口

  1. 创建 app.py

from flask import Flask, request, jsonify
from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings
from jd_spider.spiders.jd import JdSpider
import threading

app = Flask(name)

@app.route('/api/search', methods=['GET'])
def search_product():
keyword = request.args.get('q', '手机')
result = run_spider(keyword)
return jsonify(result)

def run_spider(keyword):
results = []

def crawl():
    process = CrawlerProcess(get_project_settings())
    process.crawl(JdSpider, keyword=keyword)
    process.start()

thread = threading.Thread(target=crawl)
thread.start()
thread.join(timeout=30)  # 等待爬虫完成

# 从数据库读取最新数据(伪代码)
from pymongo import MongoClient
client = MongoClient("mongodb://localhost:27017")
db = client["jd_data"]
products = list(db.products.find().limit(5))
for p in products:
    results.append({
        "name": "".join(p['name']),
        "price": p['price'],
        "link": p['link'],
        "image": p['image']
    })
return results

if name == 'main':
app.run(port=5000)

五、Step 3:接入微信机器人(使用 itchat)

  1. 创建 wechat_bot.py

import itchat
from flask import request
import requests

@itchat.msg_register(itchat.content.TEXT)
def reply(msg):
if msg.text.startswith("查价"):
keyword = msg.text.replace("查价", "").strip()
try:
res = requests.get(f"http://localhost:5000/api/search?q={keyword}")
data = res.json()
if data:
reply_text = f"🔍 {keyword} 京东报价:\n"
for item in data[:3]:
reply_text += f"{item['name'][:20]}... ¥{item['price']}\n{item['link']}\n\n"
return reply_text
else:
return "未找到相关商品,请换个关键词试试~"
except Exception as e:
return f"查询失败:{str(e)}"
else:
return "发送“查价+商品名”开始比价,如:查价 iPhone 15"

if name == 'main':
itchat.auto_login(hotReload=True)
itchat.run()

六、运行流程

  1. 启动 MongoDB 服务
  2. 启动 Flask API:python app.py
  3. 启动微信机器人:python wechat_bot.py → 扫码登录
  4. 用户发送:“查价 小米14”,机器人返回京东价格 & 链接

七、进阶优化建议

功能增强:

✅ 加入淘宝、拼多多爬虫(需处理反爬)
✅ 历史价格曲线(存储每日价格,绘制图表)
✅ 设置降价提醒(定时任务 + 微信推送)
✅ 支持图片识别搜索(OCR + 百度识图API)

性能优化:

⚡ 使用 Redis 缓存热门商品查询结果
⚡ Scrapy + Kafka 异步任务队列
⚡ Docker 容器化部署

八、注意事项(法律与合规)

⚠️ 遵守 robots.txt,避免高频请求被封 IP
⚠️ 不爬取用户隐私数据
⚠️ 商业用途需获得授权,避免侵权

九、总结

本项目展示了如何从零构建一个实用的电商比价机器人,涵盖:

• Scrapy 数据采集

• Flask RESTful API 封装

• 微信消息交互

• 数据持久化与展示

这不仅是一个练手项目,更是通往“智能电商助手”的第一步!

🎁 附加资源:

• GitHub 示例仓库模板(可提供)

• 京东价格监控 Chrome 插件源码

• 微信机器人开发文档(itchat / WeChaty)

是否需要我为你生成一个完整的 GitHub 项目目录结构和代码示例压缩包清单,方便你直接克隆开发?

相关文章
|
20小时前
|
人工智能 JSON 机器人
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
本文带你零成本玩转OpenClaw:学生认证白嫖6个月阿里云服务器,手把手配置飞书机器人、接入免费/高性价比AI模型(NVIDIA/通义),并打造微信公众号“全自动分身”——实时抓热榜、AI选题拆解、一键发布草稿,5分钟完成热点→文章全流程!
9617 15
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
|
12天前
|
人工智能 安全 Linux
【OpenClaw保姆级图文教程】阿里云/本地部署集成模型Ollama/Qwen3.5/百炼 API 步骤流程及避坑指南
2026年,AI代理工具的部署逻辑已从“单一云端依赖”转向“云端+本地双轨模式”。OpenClaw(曾用名Clawdbot)作为开源AI代理框架,既支持对接阿里云百炼等云端免费API,也能通过Ollama部署本地大模型,完美解决两类核心需求:一是担心云端API泄露核心数据的隐私安全诉求;二是频繁调用导致token消耗过高的成本控制需求。
5795 14
|
20天前
|
人工智能 JavaScript Ubuntu
5分钟上手龙虾AI!OpenClaw部署(阿里云+本地)+ 免费多模型配置保姆级教程(MiniMax、Claude、阿里云百炼)
OpenClaw(昵称“龙虾AI”)作为2026年热门的开源个人AI助手,由PSPDFKit创始人Peter Steinberger开发,核心优势在于“真正执行任务”——不仅能聊天互动,还能自动处理邮件、管理日程、订机票、写代码等,且所有数据本地处理,隐私完全可控。它支持接入MiniMax、Claude、GPT等多类大模型,兼容微信、Telegram、飞书等主流聊天工具,搭配100+可扩展技能,成为兼顾实用性与隐私性的AI工具首选。
22613 119

热门文章

最新文章