双十一的商品价格“明降暗升”?看看每天的价格数据就知道了
前言
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理
以下文章来源于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)).contentsoup
= BeautifulSoup(r, "html.parser", from_encoding="utf-8")sku_name_div
= soup.find("div", class_="sku-name")ifnot sku_name_div:print("您输入的商品ID有误!")returnelse:
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 scheduledef run_price_job(skuId):# 使用不占主线程的方式启动 计划任务def run_continuously(interval=1):
cease_continuous_run = threading.Event()
class ScheduleThread(threading.Thread):
@classmethod
def run(cls):
whilenot 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 解决生活中的小小痛点,让钱包不再干瘪。
以上是 双十一的商品价格“明降暗升”?看看每天的价格数据就知道了 的全部内容, 来源链接: utcz.com/z/530540.html