Python 制作查询商品历史价格的小工具
作者:Python技术 发布时间:2021-10-13 06:03:16
标签:python,查询,工具,历史价格
一年一度的双十一就快到了,各种砍价、盖楼、挖现金的口令将在未来一个月内充斥朋友圈、微信群中。玩过多次双十一活动的小编表示一顿操作猛如虎,一看结果2毛5。浪费时间不说而且未必得到真正的优惠,双十一电商的“明降暗升”已经是默认的潜规则了。打破这种规则很简单,可以用 Python 写一个定时监控商品价格的小工具。
思路
第一步抓取商品的价格存入 Python 自带的 SQLite 数据库
每天定时抓取商品价格
使用 pyecharts 模块绘制价格折线图,让低价一目了然
抓取京东价格
从商品详情的页面中打开 F12 控制面板,找到包含 p.3 的链接,在旁边的 preview 面板中可以看到当前商品价格
def get_jd_price(skuId):
sku_detail_url = 'http://item.jd.com/{}.html'
sku_price_url = 'https://p.3.cn/prices/get?type=1&skuid=J_{}'
r = requests.get(sku_detail_url.format(skuId)).content
soup = BeautifulSoup(r, 'html.parser', from_encoding='utf-8')
sku_name_div = soup.find('div', class_="sku-name")
if not sku_name_div:
print('您输入的商品ID有误!')
return
else:
sku_name = sku_name_div.text.strip()
r = requests.get(sku_price_url.format(skuId))
price = json.loads(r.text)[0]['p']
data = {
'sku_id': skuId,
'sku_name': sku_name,
'price': price
}
return data
把抓取的价格存入 sqlite 数据库,使用 PyCharm 的 Database 功能创建一个 sqlite 数据库
最终将数据插入到数据库
# 新增
def insert(data):
conn = sqlite3.connect('price.db')
c = conn.cursor()
sql = 'INSERT INTO price (sku_id,sku_name,price) VALUES ("{}", "{}", "{}")'.format(data.get("sku_id"), data.get("sku_name"), data.get('price') )
c.execute(sql)
conn.commit()
conn.close()
# 查询
def select(sku_id):
conn = sqlite3.connect('price.db')
c = conn.cursor()
sql = 'select sku_id, sku_name, price, time from price where sku_id = "{}" order by time asc'.format(sku_id)
cursor = c.execute(sql)
datas = []
for row in cursor:
data = {
'sku_id': row[0],
'sku_name': row[1],
'price': row[2],
'time': row[3]
}
datas.append(data)
conn.close()
return datas
示例结果
计划任务
使用轻量级的 schedule 模块每天早上 10 点抓取京东价格这一步骤
安装 schedule 模块
pip install schedule
def run_price_job(skuId):
# 使用不占主线程的方式启动 计划任务
def run_continuously(interval=1):
cease_continuous_run = threading.Event()
class ScheduleThread(threading.Thread):
@classmethod
def run(cls):
while not cease_continuous_run.is_set():
schedule.run_pending()
time.sleep(interval)
continuous_thread = ScheduleThread()
continuous_thread.start()
return cease_continuous_run
# 每天10点运行,get_jd_price:任务方法,skuId:任务方法的参数
schedule.every().day.at("10:00").do(get_jd_price, skuId=skuId)
run_continuously()
查看历史价格
使用 pytharts 模块绘制折线图,直观的查看每一天的价格差异
datas = select(skuId)
def line(datas):
x_data = []
y_data = []
for data in datas:
x_data.append(data.get('time'))
y_data.append(data.get('price'))
(
Line()
.add_xaxis(x_data)
.add_yaxis(datas[0].get('sku_name'), y_data, is_connect_nones=True)
.render("商品历史价格.html")
)
总结
本文抓取了京东商城的价格,小伙伴们也可以修个脚本抓取淘宝的价格。使用 Python 解决生活中的小小痛点,让钱包不再干瘪。
示例代码:
用 Python 制作商品历史价格查询
来源:http://www.justdopython.com/2020/10/19/python-jdPrice/?utm_source=tuicool&utm_medium=referral


猜你喜欢
- 本文为大家分享一个简单商城购物车的python代码,供大家参考,具体内容如下要求:1、写一段商城程购物车序的代码2、用列表把商城的商品清单存
- 操作步骤1.下载BeautifulReport文件,本例文件下载地址 最新文件下载地址2.复制文件BeautifulReport,至pyth
- 前言每条if语句的核心都是一个值为True或False的表达式,这种表达式被称为条件测试。Python根据条件测试的值为True还是Fals
- Python pip安装lxml出错的问题解决办法1. 在使用pip安装lxml过程中出现了一下错误: &
- # 建表CREATE TABLE `T_TEST` ( `Id` int(11) NOT NULL AUTO_INCREMENT
- MS SQL基本语法及实例操作 一:建表并初始化 ============================ create database
- ##通过sqlcmd执行sql文件由于sql文件过大,超过了100M,再数据库的窗口执行,结果超出内存了,对于特别大的sql文件可以使用sq
- 前言Python中,.whl文件是使用wheel格式存储的一种Python安装包,同时也是一个标准的内置包格式。可以将其看作Python库的
- if (reValue== undefined){ alert("undefined"); } 发现判断不出来,最后查了
- Pytorch版本介绍torch:1.6CUDA:10.2cuDNN:8.1.0✨安装 NVIDIA 显卡驱动程序一般 电脑出厂/装完系统
- Linux 自动备份oracle数据:曾经有个同事,来回操作开发和生产的数据库,结果误删了生产的数据库,那种心情我想不是一般人能理解的,虽然
- 本文的主要内容是向大家分享几个Python面试中的T题目,同时给出了答案并对其进行分析,具体如下。本文的原文是5 Great Python
- Socket有一个缓冲区,缓冲区是一个流,先进先出,发送和取出的可自定义大小的,如果取出的数据未取完缓冲区,则可能存在数据怠慢。其中【rec
- 一、读取postgresql数据库(1)首先,我们需要安装 psycopg 驱动。通过 pip 安装最新的 psycopgpip insta
- [sql] --1.将每个老师的工资更新为原来的工资+奖金 --定义两个变量,用来存储ttid与reward declare @tid in
- 思路:<img alt="" src="/img/图片真实地址" ></img&g
- MySQL出错代码列表:1005:创建表失败1006:创建数据库失败1007:数据库已存在,创建数据库失败1008:数据库不存在,删除数据库
- 一、常见的异常1、NameError 未定义变量异常print(a)# 输出:NameError: name 'a' is
- 1.下载MySQL下载地址,选择要下载的版本,建议选择DMG安装包,用着比较方便。2.解压并安装DMG包中的mysql-5.6.12-osx
- 解析接口返回数据1、把json格式的数据转换成单个{key,value}的形式,并把每个dict存入listdef parse(self,d