《实战!用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 项目目录结构和代码示例压缩包清单,方便你直接克隆开发?

相关文章
|
2月前
|
人工智能 弹性计算 自然语言处理
【低成本养龙虾】阿里云OpenClaw一键秒级部署指南,9.9元/月定制AI助理!
全网爆火的“养龙虾”实为部署开源AI智能体OpenClaw(Logo似红龙虾,“Claw”喻动手能力)。阿里云推出9.9元/月一键部署方案,无需代码,10分钟即可拥有能读写文件、控浏览器、写代码、管日程的专属AI助理!
983 3
|
8月前
|
Web App开发 前端开发 JavaScript
Playwright极速UI自动化实战指南
Playwright告别Selenium痛点,以智能等待、强大选择器、网络拦截与多设备模拟四大利器,提升自动化效率与稳定性。本文通过实战代码详解其加速秘籍,助你构建高效、可靠的UI测试方案。
|
机器学习/深度学习 分布式计算 Java
Hbase入门(二)——安装与配置
本文讲述如何安装,部署,启停HBase集群,如何通过命令行对Hbase进行基本操作。 并介绍Hbase的配置文件。 在安装前需要将所有先决条件安装完成。
1340 0
Hbase入门(二)——安装与配置
|
1月前
|
NoSQL 前端开发 Java
响应式编程的Java实践:Reactor与WebFlux的工程落地
响应式编程是近年来Java生态中最具话题性的技术方向之一。它声称能够以更少的资源处理更高的并发,但学习曲线陡峭,调试困难,概念抽象。那么,响应式编程到底解决了什么问题?它在什么场景下真正有价值?在Java生态中如何落地?
175 3
|
3月前
|
运维 监控 API
OpenClaw(Clawdbot)AI Agent 全栈指南:阿里云+本地部署+监控仪表盘,运维效率翻倍
2026年,OpenClaw(前身Clawdbot/Moltbot)以19万+GitHub星标成为现象级本地AI Agent项目,其丰富的技能生态让自动化办公、开发辅助等场景落地成为可能。但随着使用深入,用户普遍面临一个痛点:原生OpenClaw仅提供基础日志查看功能,无法直观掌握运行状态——模型调用成本、网关健康、Cron任务执行情况、Token消耗等关键信息分散在不同文件中,运维效率极低。
1514 12
|
4月前
|
数据采集 JSON 监控
淘宝商品评论API使用指南
淘宝商品评论API可批量获取指定商品的评论数据,支持筛选评价类型、分页查询及提取评论内容、评分、晒图、买家信息等。需入驻淘宝开放平台,获取AppKey/AppSecret,调用接口taobao.item.review.get,通过签名验证,实现结构化数据采集,适用于电商分析与口碑监控。(239字)
|
3月前
|
人工智能 JavaScript 安全
阿里云+Windows本地部署OpenClaw全栈指南:集成8大开源Dashboard,告别管理混乱
2026年,OpenClaw(原Clawdbot)作为自托管AI代理框架,凭借开源可控、全场景自动化的优势,已成为个人提效与企业数字化转型的核心工具。但随着多Agent协作、技能插件增多,用户普遍面临“管理混乱”的痛点——十几个AI Agent同时运行,成本莫名飙升,却查不到资源消耗源头;定时任务卡死、配置文件杂乱,终端命令零散难控。
2226 4
|
数据采集 JavaScript 前端开发
京东商品详情 API 接口指南(Python 篇)
本简介介绍如何使用Python抓取京东商品详情数据。首先,需搭建开发环境并安装必要的库(如requests、BeautifulSoup和lxml),了解京东反爬虫机制,确定商品ID获取方式。通过发送HTTP请求并解析HTML,可提取价格、优惠券、视频链接等信息。此方法适用于电商数据分析、竞品分析、购物助手及内容创作等场景,帮助用户做出更明智的购买决策,优化营销策略。
1511 0
|
10月前
|
JSON 机器人 API
微信机器人自动回复插件,vx自动回复机器人脚本助手,python框架分享
这个微信机器人系统包含三个主要模块:主程序基于itchat实现微信消息监听和自动回复功能
|
传感器 算法 Java
基于 pyflink 的算法工作流设计和改造
本文分享了硕橙科技大数据工程师程兴源在Flink Forward Asia 2024上的演讲内容,围绕工业互联网场景下的Flink应用展开。主要内容包括:为何选择Flink、算法工作流设计、性能优化实践、上下游链路协作思考及未来展望。团队通过Flink处理工业设备数据(如温度、振动等),实现故障预测与分析。文章详细探讨了性能优化路径(如批处理、并行度提升)、KeyBy均衡化、内存管理等技术细节,并介绍了数据补全方法和告警规则的设计。最后,对未来基于Flink的编码强化、CEP模式改进及工业数据归因目标进行了展望。
500 7
基于 pyflink 的算法工作流设计和改造