多商品价格趋势图:用 Python 构建你的“电商比价神器”
·
背景:为什么需要“比价神器”?
很多人常年在电商平台(如京东、淘宝、拼多多)上购物,却总是错过“好价”。平台促销花样百出,但对我们来说,只想要两个核心功能:
• 监控多个心仪商品的价格波动
• 判断何时买最划算
• 用图表清晰查看价格趋势
传统爬虫只是“获取一次数据”,而我们今天要构建的,是一个长期运行的价格趋势分析系统。
以下是基于Python实现的多商品价格趋势监控系统,整合了数据采集、存储、分析和可视化功能,可自动追踪多个电商平台的商品价格变化:
import requests
from bs4 import BeautifulSoup
import sqlite3
import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime
import schedule
import time
class PriceTracker:
def __init__(self):
self.headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
}
self.conn = sqlite3.connect('price_data.db')
self._init_db()
def _init_db(self):
cursor = self.conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS prices (
product_id TEXT,
platform TEXT,
price REAL,
timestamp TEXT,
PRIMARY KEY (product_id, platform, timestamp)
)
''')
self.conn.commit()
def fetch_price(self, url):
try:
response = requests.get(url, headers=self.headers)
soup = BeautifulSoup(response.text, 'html.parser')
# 京东价格解析
if 'jd.com' in url:
price = soup.select_one('span.price').text.replace('¥', '')
return float(price)
# 天猫价格解析
elif 'tmall.com' in url:
price = soup.select_one('div.tm-price').text
return float(price)
except Exception as e:
print(f"抓取失败: {str(e)}")
return None
def save_price(self, product_id, platform, price):
cursor = self.conn.cursor()
cursor.execute(
"INSERT INTO prices VALUES (?, ?, ?, ?)",
(product_id, platform, price, datetime.now().isoformat())
)
self.conn.commit()
def get_price_history(self, product_id):
query = "SELECT * FROM prices WHERE product_id = ? ORDER BY timestamp"
df = pd.read_sql(query, self.conn, params=(product_id,))
return df
def plot_trend(self, product_id):
df = self.get_price_history(product_id)
if not df.empty:
plt.figure(figsize=(10, 6))
for platform in df['platform'].unique():
platform_data = df[df['platform'] == platform]
plt.plot(
pd.to_datetime(platform_data['timestamp']),
platform_data['price'],
label=platform,
marker='o'
)
plt.title(f'商品 {product_id} 价格趋势')
plt.xlabel('日期')
plt.ylabel('价格 (元)')
plt.legend()
plt.grid()
plt.savefig(f'{product_id}_price_trend.png')
plt.close()
return True
return False
系统功能说明:
1.多平台价格采集:支持京东、天猫等主流电商平台的价格抓取,通过差异化解析策略处理不同网站结构。
2.数据持久化:采用SQLite存储历史价格数据,支持按商品ID和时间戳查询。
3.趋势可视化:自动生成带平台标注的多曲线趋势图,直观展示价格波动。
4.定时监控:可配置监控频率,默认每小时自动更新价格数据。
扩展建议:
添加价格异常波动预警功能。
集成更多电商平台解析器。
增加邮件/短信通知机制。
开发Web界面展示分析结果。
更多推荐
所有评论(0)