当前位置: 首页 > article >正文

Python零成本实现京东商品价格监控+库存预警,自动薅羊毛全攻略

一、引言相信大家都有过这样的经历看中一款心仪已久的商品天天刷京东看价格结果刚买完第二天就降价或者某款热门产品一直缺货好不容易有货了却没抢到白白错过优惠。手动监控不仅费时费力还很容易错过最佳购买时机。作为一个资深薅羊毛爱好者我曾经尝试过各种价格监控工具但要么收费太贵要么有广告要么功能不全。后来我决定自己写一个Python爬虫来实现京东商品的自动价格监控和库存预警。一开始我用requests直接请求接口结果被京东的反爬系统虐得死去活来不仅要破解各种加密参数还动不动就弹出滑块验证码代码写了几百行稳定性却极差。直到我用上了之前分享的Selenium接管已启动浏览器的方法一切问题都迎刃而解。不需要破解任何加密不需要处理验证码代码量减少了80%而且稳定运行了半年多没有被封过。本文将手把手教你从零开始搭建一个属于自己的京东价格监控系统支持多商品同时监控、历史价格记录、降价自动提醒和库存预警全程零成本只要有基本的Python基础就能学会。二、技术选型与整体流程2.1 为什么选择Selenium接管浏览器京东作为国内反爬最严格的电商平台之一其反爬体系非常完善所有接口都有复杂的签名验证频繁请求会触发滑块验证码对自动化工具的检测极其严格价格和库存数据都是动态加载的如果用requests直接请求接口你需要破解sign、token等十多个加密参数而且京东每隔一段时间就会更新加密逻辑代码维护成本极高。而Selenium接管真实浏览器的方法可以绕过所有这些检测网站看到的就是一个真实用户在浏览页面。2.2 整体流程设计是否启动Chrome并开启远程调试Selenium连接浏览器手动登录京东账号加载商品监控列表访问商品页面提取商品价格和库存与历史价格对比满足预警条件?发送邮件/微信预警等待下一次检测2.3 环境准备安装所需的Python库pipinstallselenium4.19.0schedule1.2.1 python-dotenv1.0.1三、核心功能实现3.1 浏览器初始化与登录态保持这是整个系统最关键的部分。我们使用固定的用户数据目录这样只需要手动登录一次京东账号后续所有运行都会自动保持登录状态不需要每次都重新登录。fromseleniumimportwebdriverfromselenium.webdriver.chrome.optionsimportOptionsfromselenium.webdriver.support.uiimportWebDriverWaitfromselenium.webdriver.supportimportexpected_conditionsasECfromselenium.webdriver.common.byimportByimportsubprocessimporttimeimportosclassJdPriceMonitor:def__init__(self):self.port9222self.user_data_dirC:\\jd_monitor_chromeself.driverNonedefstart_chrome(self):启动Chrome并开启远程调试# 关闭所有Chrome进程subprocess.run([taskkill,/f,/im,chrome.exe],capture_outputTrue)time.sleep(1)# 创建用户数据目录ifnotos.path.exists(self.user_data_dir):os.makedirs(self.user_data_dir)# 启动Chromechrome_pathrC:\Program Files\Google\Chrome\Application\chrome.exeargs[chrome_path,f--remote-debugging-port{self.port},f--user-data-dir{self.user_data_dir},--disable-blink-featuresAutomationControlled]subprocess.Popen(args)time.sleep(3)# 连接到Chromechrome_optionsOptions()chrome_options.add_experimental_option(debuggerAddress,f127.0.0.1:{self.port})self.driverwebdriver.Chrome(optionschrome_options)print(浏览器启动成功)# 首次运行需要手动登录self.driver.get(https://passport.jd.com/new/login.aspx)input(请在浏览器中登录京东账号登录完成后按回车键继续...)3.2 商品价格与库存提取京东的商品页面有多种价格显示方式包括京东价、促销价、秒杀价、预售价格等我们需要处理所有这些情况。同时还要检测商品的库存状态区分有货、无货、预约和预售。defget_product_info(self,url):获取商品价格和库存信息try:self.driver.get(url)time.sleep(2)# 提取商品名称nameWebDriverWait(self.driver,10).until(EC.presence_of_element_located((By.CLASS_NAME,sku-name))).text.strip()# 提取价格优先取促销价没有则取京东价priceNoneprice_selectors[.price.J-p-now,# 促销价.price.J-p-ori,# 原价.seckill-price,# 秒杀价.pre-sale-price# 预售价]forselectorinprice_selectors:try:price_elementself.driver.find_element(By.CSS_SELECTOR,selector)price_textprice_element.text.strip()ifprice_textand¥inprice_text:pricefloat(price_text.replace(¥,).replace(,,))breakexcept:continue# 提取库存状态stock_status未知try:stock_elementself.driver.find_element(By.ID,store-prompt)stock_textstock_element.text.strip()if无货instock_textor暂时缺货instock_text:stock_status无货elif有货instock_textor现货instock_text:stock_status有货elif预约instock_text:stock_status预约中elif预售instock_text:stock_status预售中except:# 如果找不到库存元素默认认为有货stock_status有货return{name:name,price:price,stock:stock_status,url:url,time:time.strftime(%Y-%m-%d %H:%M:%S)}exceptExceptionase:print(f获取商品信息失败:{e})returnNone3.3 历史价格记录与预警判断我们将每个商品的历史价格记录在一个字典中每次检测时与历史最低价和用户设定的预警价格进行对比当价格低于预警值或者库存从无货变为有货时触发预警。def__init__(self):# ... 之前的初始化代码 ...self.product_history{}# 商品历史价格记录self.alert_sent{}# 已发送预警的商品避免重复发送defcheck_price_alert(self,product_info,target_price):检查是否满足预警条件urlproduct_info[url]current_priceproduct_info[price]current_stockproduct_info[stock]ifnotcurrent_price:returnFalse# 更新历史价格ifurlnotinself.product_history:self.product_history[url][]self.product_history[url].append({price:current_price,time:product_info[time]})# 计算历史最低价min_pricemin([p[price]forpinself.product_history[url]])# 预警条件价格低于目标价 或者 库存从无货变为有货should_alertFalsealert_messageifcurrent_pricetarget_price:should_alertTruealert_messagef【降价提醒】{product_info[name]}\n当前价格¥{current_price}\n目标价格¥{target_price}\n历史最低价¥{min_price}\n商品链接{url}ifcurrent_stock有货andurlinself.alert_sentandself.alert_sent[url].get(stock)无货:should_alertTruealert_messagef【库存提醒】{product_info[name]}\n现在有货了\n当前价格¥{current_price}\n商品链接{url}# 更新预警状态ifshould_alert:self.alert_sent[url]{price:current_price,stock:current_stock,time:time.time()}print(alert_message)returnalert_message# 更新库存状态ifurlnotinself.alert_sent:self.alert_sent[url]{}self.alert_sent[url][stock]current_stockreturnFalse四、预警机制实现4.1 邮件预警邮件预警是最简单、最通用的预警方式不需要任何第三方服务只需要一个邮箱账号即可。这里以QQ邮箱为例importsmtplibfromemail.mime.textimportMIMETextfromemail.headerimportHeaderdefsend_email_alert(receiver_email,message):发送邮件预警# 邮箱配置sender_email你的QQ邮箱qq.comsender_password你的QQ邮箱授权码# 注意这里是授权码不是邮箱密码smtp_serversmtp.qq.comsmtp_port465# 构造邮件msgMIMEText(message,plain,utf-8)msg[From]Header(f京东价格监控 {sender_email},utf-8)msg[To]Header(receiver_email,utf-8)msg[Subject]Header(京东商品价格变动提醒,utf-8)# 发送邮件try:serversmtplib.SMTP_SSL(smtp_server,smtp_port)server.login(sender_email,sender_password)server.sendmail(sender_email,receiver_email,msg.as_string())server.quit()print(邮件发送成功)returnTrueexceptExceptionase:print(f邮件发送失败:{e})returnFalse4.2 微信企业号预警如果你想在微信上直接收到提醒可以使用微信企业号的应用消息功能。注册一个个人企业号是完全免费的而且没有发送次数限制。五、定时任务与多商品监控使用schedule库实现定时任务可以轻松设置每30分钟或每小时检测一次价格。同时支持多个商品同时监控只需要把商品信息添加到监控列表中即可。importscheduledefmonitor_job(monitor,products):监控任务print(f\n开始检测时间{time.strftime(%Y-%m-%d %H:%M:%S)})forproductinproducts:urlproduct[url]target_priceproduct[target_price]print(f正在检测{url})product_infomonitor.get_product_info(url)ifproduct_info:print(f商品名称{product_info[name]})print(f当前价格¥{product_info[price]})print(f库存状态{product_info[stock]})alert_messagemonitor.check_price_alert(product_info,target_price)ifalert_message:send_email_alert(你的邮箱example.com,alert_message)time.sleep(random.uniform(5,10))# 随机延迟避免被检测if__name____main__:# 要监控的商品列表products_to_monitor[{url:https://item.jd.com/100012345678.html,target_price:2999},{url:https://item.jd.com/100087654321.html,target_price:199}]# 初始化监控器monitorJdPriceMonitor()monitor.start_chrome()# 设置定时任务每30分钟检测一次schedule.every(30).minutes.do(monitor_job,monitor,products_to_monitor)print(价格监控系统已启动按CtrlC退出)try:whileTrue:schedule.run_pending()time.sleep(1)exceptKeyboardInterrupt:print(\n正在退出...)monitor.driver.quit()subprocess.run([taskkill,/f,/im,chrome.exe],capture_outputTrue)print(监控系统已关闭)六、实战技巧与注意事项检测频率设置不要设置得太频繁建议至少15分钟一次否则容易被京东限制。对于价格变动不频繁的商品每小时检测一次就足够了。登录态保持使用固定的user-data-dir登录一次后可以保持几个月的登录状态。如果登录态失效重新手动登录一次即可。元素选择器更新京东偶尔会更新页面结构如果发现提取不到价格或库存用开发者工具重新查找对应的元素选择器即可。多账号轮换如果需要监控大量商品可以准备多个京东账号轮换使用降低被检测的风险。异常处理添加完善的异常处理机制当网络异常或页面加载失败时自动重试而不是直接崩溃。七、总结本文实现了一个功能完整的京东商品价格监控系统使用Selenium接管真实浏览器的方法绕过了京东的反爬检测代码简单易懂维护成本极低。你可以根据自己的需求扩展更多功能比如支持天猫、淘宝等其他电商平台添加历史价格走势图实现降价自动下单支持短信、钉钉等更多预警方式最后提醒大家本工具仅供个人学习和使用请遵守京东的用户协议和相关法律法规不要用于商业用途或大规模爬取数据。合理使用这个工具可以帮你省下不少钱再也不会错过任何优惠活动。

相关文章:

Python零成本实现京东商品价格监控+库存预警,自动薅羊毛全攻略

一、引言 相信大家都有过这样的经历:看中一款心仪已久的商品,天天刷京东看价格,结果刚买完第二天就降价;或者某款热门产品一直缺货,好不容易有货了却没抢到,白白错过优惠。手动监控不仅费时费力&#xff0c…...

避开滑模控制的5个大坑:从切换函数设计到抖振抑制的避坑指南

避开滑模控制的5个大坑:从切换函数设计到抖振抑制的避坑指南 滑模控制因其强鲁棒性和对参数变化的不敏感性,已成为非线性控制领域的重要工具。但在实际工程应用中,许多开发者常陷入一些典型陷阱,导致系统性能下降甚至失控。本文将…...

告别锯齿路径:为什么说‘热流法’是计算3D模型上最短路径的更优解?

告别锯齿路径:为什么说‘热流法’是计算3D模型上最短路径的更优解? 在三维建模和游戏开发中,计算模型表面两点间的最短路径是一个基础但极具挑战性的问题。想象一下,你正在开发一款开放世界游戏,角色需要在地形复杂的山…...

终极游戏分屏解决方案:UniversalSplitScreen让多玩家同屏游戏变得简单

终极游戏分屏解决方案:UniversalSplitScreen让多玩家同屏游戏变得简单 【免费下载链接】UniversalSplitScreen Split screen multiplayer for any game with multiple keyboards, mice and controllers. 项目地址: https://gitcode.com/gh_mirrors/un/UniversalSp…...

从“算命大师”到“法律顾问”:手把手教你用Unsloth和HuggingFace数据集定制专属领域AI助手

从“算命大师”到“法律顾问”:手把手教你用Unsloth和HuggingFace数据集定制专属领域AI助手 在AI技术快速迭代的今天,通用大模型虽然功能强大,但面对专业领域问题时往往显得力不从心。想象一下,当企业需要处理法律咨询、医疗诊断或…...

如何快速搭建个人飞行监控系统:完整ADS-B信号解码实战指南

如何快速搭建个人飞行监控系统:完整ADS-B信号解码实战指南 【免费下载链接】dump1090 Dump1090 is a simple Mode S decoder for RTLSDR devices 项目地址: https://gitcode.com/gh_mirrors/dump/dump1090 想要实时追踪头顶飞过的航班吗?梦想拥有…...

Xilinx DDR4 MIG与Synopsys VIP联仿实战:一个控制器挂4片颗粒的UVM验证平台搭建

Xilinx DDR4 MIG与Synopsys VIP联仿实战:多颗粒验证平台架构设计 在高速存储接口验证领域,DDR4控制器与多颗粒协同工作的场景日益普遍。当我们需要验证一个64位位宽的Xilinx MIG控制器连接4片16位DDR4颗粒的复杂系统时,传统的单颗粒验证方法显…...

Windows 11终极优化指南:使用Win11Debloat轻松精简系统提升性能

Windows 11终极优化指南:使用Win11Debloat轻松精简系统提升性能 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutt…...

从单云POC到多云生产上线仅用11天:某金融头部机构大模型跨云工程化落地的4层解耦架构(附GitOps流水线图谱)

第一章:从单云POC到多云生产上线仅用11天:某金融头部机构大模型跨云工程化落地的4层解耦架构(附GitOps流水线图谱) 2026奇点智能技术大会(https://ml-summit.org) 该机构在严格合规与零停机前提下,将大模型服务从阿里…...

揭秘MySQL索引分类负

1. 架构背景与演进动力 1.1 从单体到碎片化:.NET 的开源征程 在.NET Framework 时代,构建系统主要围绕 Windows 操作系统紧密集成,采用传统的封闭式开发模式。然而,随着.NET Core 的推出,微软开启了彻底的开源与跨平台…...

终极指南:3步掌握IPATool命令行工具,轻松下载iOS应用IPA文件

终极指南:3步掌握IPATool命令行工具,轻松下载iOS应用IPA文件 【免费下载链接】ipatool Command-line tool that allows searching and downloading app packages (known as ipa files) from the iOS App Store 项目地址: https://gitcode.com/GitHub_T…...

别再被推着走了:你不是被动的沙,而是塑造自己的海

《元能力系统:重塑你的内在架构》 第五模块:【进化篇】—— 面向未来的生命架构 (21/21) 从沙到海:生命架构师的觉醒 说句实在话,写这篇结语的时候,我坐在书桌前发了好一会儿呆 。 窗外有风,楼下有人在遛狗,远处有孩子的笑声 。都是平常的日子。但这几个月,咱们一起走…...

WPF网格布局实战:从基础定义到动态行列操作

1. WPF网格布局基础入门 第一次接触WPF的Grid布局时,我完全被它强大的灵活性震撼到了。这就像小时候玩的乐高积木,通过行列组合可以搭建出任何你想要的界面结构。Grid是WPF中最常用的布局容器之一,它通过二维网格系统来组织子元素&#xff0c…...

玉米秸秆粉碎机毕业设计 论文

玉米秸秆粉碎机作为农业机械化的重要设备,其核心作用在于将收割后的玉米秸秆高效破碎成细小颗粒,为后续资源化利用提供基础。传统处理方式中,秸秆多通过焚烧或堆放处理,不仅造成环境污染,还浪费了大量可循环资源。粉碎…...

3倍极速突破:Gofile多线程下载器实战指南

3倍极速突破:Gofile多线程下载器实战指南 【免费下载链接】gofile-downloader Download files from https://gofile.io 项目地址: https://gitcode.com/gh_mirrors/go/gofile-downloader 在文件传输成为日常刚需的数字时代,你是否曾因Gofile大文件…...

为什么93%的企业NER项目卡在第2.7阶段?——基于奇点大会27家头部厂商落地数据的断点诊断模型

第一章:为什么93%的企业NER项目卡在第2.7阶段? 2026奇点智能技术大会(https://ml-summit.org) “第2.7阶段”并非官方标准,而是工业界对NER(命名实体识别)落地过程中一个高频失败临界点的戏称——它介于完成模型训练&…...

别再吹牛了,% Vibe Coding 存在无法自洽的逻辑漏洞!捶

简介 langchain中提供的chain链组件,能够帮助我门快速的实现各个组件的流水线式的调用,和模型的问答 Chain链的组成 根据查阅的资料,langchain的chain链结构如下: $$Input \rightarrow Prompt \rightarrow Model \rightarrow Outp…...

OpCore Simplify终极指南:如何30分钟完成黑苹果EFI智能配置

OpCore Simplify终极指南:如何30分钟完成黑苹果EFI智能配置 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 你是否也曾被黑苹果复杂的EFI配…...

把近万个源文件喂给AI之前,我先做了一件事诺

插件化架构 v3 版本最大的变化是引入了模块化插件系统。此前版本中集成在核心包里的原生功能,现在被拆分成独立的插件。 每个插件都是一个独立的 Composer 包,包含 Swift 和 Kotlin 代码、权限清单以及原生依赖。开发者只需安装实际用到的插件&#xff0…...

手把手教学:基于Anything V5的Web服务搭建与使用详解

手把手教学:基于Anything V5的Web服务搭建与使用详解 1. 概述与准备工作 1.1 Anything V5简介 Anything V5是基于Stable Diffusion技术构建的AI图像生成模型,能够根据文字描述生成高质量的图片。相比标准版Stable Diffusion,Anything V5在…...

突破下载瓶颈:XDM浏览器扩展的架构深度解析与技术实践

突破下载瓶颈:XDM浏览器扩展的架构深度解析与技术实践 【免费下载链接】xdm Powerfull download accelerator and video downloader 项目地址: https://gitcode.com/gh_mirrors/xd/xdm 在当今网络环境中,下载速度瓶颈和视频资源捕获已成为技术用户…...

第3篇:ChatGPT引爆的AIGC革命——内容创作的新纪元(概念入门)

文章目录背景引入:当我的“周报”被AI抢了饭碗核心概念:什么是AIGC?类比解释:从“图书馆管理员”到“小说家”简单示例:看AIGC如何工作为什么说这是“新纪元”?小结:拥抱变化,聚焦“…...

Android设备标识架构解析:Android_CN_OAID实现原理与实战指南

Android设备标识架构解析:Android_CN_OAID实现原理与实战指南 【免费下载链接】Android_CN_OAID 安卓设备唯一标识解决方案,可替代移动安全联盟(MSA)统一 SDK 闭源方案。包括国内手机厂商的开放匿名标识(OAID&#xff…...

大模型上线即崩溃?——某千亿参数模型因未执行混沌验证,上线2小时触发37次OOM-Kill(完整复盘报告)

第一章:大模型上线即崩溃?——某千亿参数模型因未执行混沌验证,上线2小时触发37次OOM-Kill(完整复盘报告) 2026奇点智能技术大会(https://ml-summit.org) 该模型部署于Kubernetes集群,采用4A100 80GB GPU节…...

从LoRA到O-LoRA:大模型持续学习技术演进与最新突破全解析

从LoRA到O-LoRA:大模型持续学习技术演进与最新突破全解析 当ChatGPT掀起大模型应用狂潮时,一个常被忽视的挑战逐渐浮出水面:如何让这些"AI大脑"像人类一样持续学习新知识而不遗忘旧技能?传统方法在应对多任务序列学习时…...

为什么92.7%的企业AIGC项目在2026Q1前将遭遇语义坍塌?——奇点大会文本生成分论坛深度解码

第一章:语义坍塌:AIGC产业演进中的隐性奇点 2026奇点智能技术大会(https://ml-summit.org) 当生成式模型在训练数据中反复采样、蒸馏、再合成,语言不再是意义的载体,而退化为统计共振的残响——这并非模型失效,而是语…...

【2026奇点大会语音合成终极指南】:大模型TTS技术跃迁的5大拐点与企业落地避坑清单

第一章:2026奇点智能技术大会:大模型语音合成 2026奇点智能技术大会(https://ml-summit.org) 语音合成技术的范式跃迁 在2026奇点智能技术大会上,大模型驱动的语音合成(TTS)已突破传统拼接与参数建模的边界&#xff…...

【限时解禁】某自动驾驶大模型在线学习模块源码片段(含动态LoRA路由+时间敏感缓存淘汰算法)

第一章:大模型工程化中的在线学习机制 2026奇点智能技术大会(https://ml-summit.org) 在线学习机制是大模型从静态部署走向动态演化的关键桥梁,它使模型能在生产环境中持续吸收新数据、响应分布偏移,并在不中断服务的前提下完成参数更新。与…...

WLAN部署实战:从AP上线到CAPWAP隧道建立的完整解析

1. WLAN组网基础:为什么需要AP与AC协作? 想象一下你走进一家咖啡馆,手机自动连上了WiFi。这个看似简单的动作背后,其实是一套复杂的无线局域网(WLAN)系统在运作。现代企业级WLAN通常采用AC(无线…...

从PostGIS连接到热力图生成:安装完QGIS后,我建议你先配置好这5个必装插件

从PostGIS连接到热力图生成:QGIS新手必装的5个效率插件 刚装好QGIS时,面对那个简洁到近乎空旷的界面,我猜你和大多数初学者一样会愣上几秒——这玩意儿真能替代ArcGIS?直到后来偶然点开插件库,才发现自己差点错过了一个…...