Python 製作查詢商品歷史價格的小工具
阿新 • • 發佈:2020-10-21
一年一度的雙十一就快到了,各種砍價、蓋樓、挖現金的口令將在未來一個月內充斥朋友圈、微信群中。玩過多次雙十一活動的小編表示一頓操作猛如虎,一看結果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,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 製作商品歷史價格查詢
以上就是Python 製作查詢商品歷史價格的小工具的詳細內容,更多關於python 查詢歷史價格的資料請關注我們其它相關文章!