Python 制作查詢商品歷史價(jià)格的小工具
一年一度的雙十一就快到了,各種砍價(jià)、蓋樓、挖現(xiàn)金的口令將在未來一個(gè)月內(nèi)充斥朋友圈、微信群中。玩過多次雙十一活動(dòng)的小編表示一頓操作猛如虎,一看結(jié)果2毛5。浪費(fèi)時(shí)間不說而且未必得到真正的優(yōu)惠,雙十一電商的“明降暗升”已經(jīng)是默認(rèn)的潛規(guī)則了。打破這種規(guī)則很簡(jiǎn)單,可以用 Python 寫一個(gè)定時(shí)監(jiān)控商品價(jià)格的小工具。

思路
- 第一步抓取商品的價(jià)格存入 Python 自帶的 SQLite 數(shù)據(jù)庫(kù)
- 每天定時(shí)抓取商品價(jià)格
- 使用 pyecharts 模塊繪制價(jià)格折線圖,讓低價(jià)一目了然
抓取京東價(jià)格
從商品詳情的頁面中打開 F12 控制面板,找到包含 p.3 的鏈接,在旁邊的 preview 面板中可以看到當(dāng)前商品價(jià)格

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
把抓取的價(jià)格存入 sqlite 數(shù)據(jù)庫(kù),使用 PyCharm 的 Database 功能創(chuàng)建一個(gè) sqlite 數(shù)據(jù)庫(kù)


最終將數(shù)據(jù)插入到數(shù)據(jù)庫(kù)
# 新增
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
示例結(jié)果

計(jì)劃任務(wù)
使用輕量級(jí)的 schedule 模塊每天早上 10 點(diǎn)抓取京東價(jià)格這一步驟
安裝 schedule 模塊
pip install schedule
def run_price_job(skuId):
# 使用不占主線程的方式啟動(dòng) 計(jì)劃任務(wù)
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點(diǎn)運(yùn)行,get_jd_price:任務(wù)方法,skuId:任務(wù)方法的參數(shù)
schedule.every().day.at("10:00").do(get_jd_price, skuId=skuId)
run_continuously()
查看歷史價(jià)格
使用 pytharts 模塊繪制折線圖,直觀的查看每一天的價(jià)格差異
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("商品歷史價(jià)格.html")
)

總結(jié)
本文抓取了京東商城的價(jià)格,小伙伴們也可以修個(gè)腳本抓取淘寶的價(jià)格。使用 Python 解決生活中的小小痛點(diǎn),讓錢包不再干癟。
示例代碼:
以上就是Python 制作查詢商品歷史價(jià)格的小工具的詳細(xì)內(nèi)容,更多關(guān)于python 查詢歷史價(jià)格的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Django使用echarts進(jìn)行可視化展示的實(shí)踐
可視化是將數(shù)據(jù)轉(zhuǎn)換成圖形或圖像在屏幕上顯示出來,本文主要介紹了Django使用echarts進(jìn)行可視化展示的實(shí)踐,感興趣的可以了解一下2021-06-06
Python實(shí)現(xiàn)優(yōu)先級(jí)隊(duì)列結(jié)構(gòu)的方法詳解
優(yōu)先級(jí)隊(duì)列(priority queue)是0個(gè)或多個(gè)元素的集合,每個(gè)元素都有一個(gè)優(yōu)先權(quán),接下來就來看一下簡(jiǎn)潔的Python實(shí)現(xiàn)優(yōu)先級(jí)隊(duì)列結(jié)構(gòu)的方法詳解:2016-06-06
Python區(qū)塊鏈范圍結(jié)論及Genesis Block的添加教程
這篇文章主要為大家介紹了Python區(qū)塊鏈范圍結(jié)論及Genesis Block的添加,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
詳解appium+python 啟動(dòng)一個(gè)app步驟
這篇文章主要介紹了詳解appium+python 啟動(dòng)一個(gè)app步驟,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-12-12
Python使用pip安裝報(bào)錯(cuò):is not a supported wheel on this platform的解決
這篇文章主要介紹了Python使用pip安裝報(bào)錯(cuò):is not a supported wheel on this platform的解決方法,結(jié)合實(shí)例形式分析了在安裝版本正確的情況下pip安裝報(bào)錯(cuò)的原因與相應(yīng)的解決方法,需要的朋友可以參考下2018-01-01
如何利用python在剪貼板上讀取/寫入數(shù)據(jù)
說起處理數(shù)據(jù)就離不開導(dǎo)入導(dǎo)出,而我們使用Pandas時(shí)候最常用的就是read_excel、read_csv了,下面這篇文章主要給大家介紹了關(guān)于如何利用python在剪貼板上讀取/寫入數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下2022-07-07
pytorch: tensor類型的構(gòu)建與相互轉(zhuǎn)換實(shí)例
今天小編就為大家分享一篇pytorch: tensor類型的構(gòu)建與相互轉(zhuǎn)換實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-07-07
python實(shí)現(xiàn)在目錄中查找指定文件的方法
這篇文章主要介紹了python實(shí)現(xiàn)在目錄中查找指定文件的方法,通過模糊查找與精確查找兩個(gè)實(shí)例較為詳細(xì)的闡述了文件查找的方法,是非常實(shí)用的技巧,需要的朋友可以參考下2014-11-11
Python實(shí)現(xiàn)CART決策樹算法及詳細(xì)注釋
CART算法是一種樹構(gòu)建算法,既可以用于分類任務(wù),又可以用于回歸,本文僅討論基本的CART分類決策樹構(gòu)建,不討論回歸樹和剪枝等問題,感興趣的朋友跟隨小編一起看看吧2021-10-10

