淘宝查历史价格(用Python记录商品每天价格)

2023-01-12 05:54:33 发布:网友投稿 作者:网友投稿
热度:45

玩过多次双十一活动的小编表示一顿操作猛如虎,一看结果2毛5。 浪费时间不说而且未必得到真正的优惠,双十一电商的“明降暗升”已经是默认的潜规则了。 打破这种规则很简单,可以用 Python 写一个定时监控商品价格的小工具。

思路

  1. 第一步抓取商品的价格存入 Python 自带的 SQLite 数据库
  2. 每天定时抓取商品价格
  3. 使用 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")

ifnotsku_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
}
returndata

把抓取的价格存入 sqlite 数据库,使用 PyCharm 的 Database 功能创建一个 sqlite 数据库

最终将数据插入到数据库

#新增
definsert(data):
conn=sqlite3.connect('price.db')
c=conn.cursor()
sql='INSERTINTOprice(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()

#查询
defselect(sku_id):
conn=sqlite3.connect('price.db')
c=conn.cursor()
sql='selectsku_id,sku_name,price,timefrompricewheresku_id="{}"orderbytimeasc'.format(sku_id)
cursor=c.execute(sql)

datas=[]
forrowincursor:
data={
'sku_id':row[0],
'sku_name':row[1],
'price':row[2],
'time':row[3]
}
datas.append(data)
conn.close()

returndatas

示例结果

计划任务

使用轻量级的 schedule 模块每天早上 10 点抓取京东价格这一步骤

安装 schedule 模块

pipinstallschedule
defrun_price_job(skuId):

#使用不占主线程的方式启动计划任务
defrun_continuously(interval=1):
cease_continuous_run=threading.Event()

classScheduleThread(threading.Thread):
@classmethod
defrun(cls):
whilenotcease_continuous_run.is_set():
schedule.run_pending()
time.sleep(interval)

continuous_thread=ScheduleThread()
continuous_thread.start()
returncease_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)

defline(datas):
x_data=[]
y_data=[]
fordataindatas:
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 解决生活中的小小痛点,让钱包不再干瘪。

下一篇:aj1黑人月价格
上一篇:淘宝查历史价格(电商产品模仿)