購物節真的便宜嗎?
月薪上萬的白領們為了2塊5毛錢的優惠券起早貪黑,也是堪稱人類迷惑行為大賞了……
問題是,你以為自己真的賺到了?
商品“明降暗升”的傳言早有耳聞:很多商品在雙十一之前早早地把價格調高,加上優惠之後也不過就是跟以前的原價相當。讓不知情的消費者在心理上感覺占了便宜。
這個傳言是不是真的,很好判斷,隻要定期去通路商品頁面,記錄價格就可以。不過一般人也沒閑工夫這麼去做。
于是,我用 Python 做了一個可以定時監控商品的小工具,可以幫你監控想要關注的商品。
工具完成之後,我們随機挑選了幾個商品作為測試,結果就有一個中招了……(真的是随便選的):
這款保暖背心産品,之前标價 39.9元,到11月之後卻突然調價為 49.9元,并标注上了“雙11狂歡價”,也就是原價……
代碼實作:
識别套路的代碼其實并不複雜,主要就2點:
1. 首先要設定你要監控的商品位址,通過 requests 庫擷取商品資訊。
import requests url = '商品連結位址' r = requests.get(url)
對于這點來說,不同的網站的情況會有不一樣,有的網站直接可以擷取,有的需要增加一些 headers 資訊;有的内容就在 HTML 頁面上,有的則是通過 API 接口傳遞資料;甚至還有的網站發現你是機器請求時,會給你一個假的價格……
我們的代碼裡以 天貓、蘇甯、京東、拼多多 4個平台做為示例,具體差别可以閱讀代碼。
2. 能抓到價格是第一步,我們還需要能定時抓。
Windows 平台上可以通過 任務計劃程式 來定時執行你的 py 腳本;Linux 或 Mac 則使用 crontab 功能。這裡不贅述,可以網上搜下關鍵字。
有這兩步,就可以起到定時監控商品價格的效果了。為了便于檢視,我們還可以增加一步:
3. 用 matplotlib 或者 pyecharts 等繪圖庫繪制出商品價格時間變化折線圖。
我們本次工具中選擇了後者。
如果你要想使用我們這個工具,隻需要按照代碼中 goods.csv 檔案裡的格式,添加你要監控的商品連結,然後按文檔中的說明加到對應系統的定時任務裡就可以了。
此外,我們還制作了一個小的頁面工具,可以讓你在一個頁面中同時搜尋上述四家平台的相同關鍵字産品,真正的貨比“三”家:
這個其實也很簡單,就是用 iframe 去嵌入不同家的搜尋頁即可。
薅大額優惠券
除了假降價外,我們經常能看到電商有發滿200減100之類的大額神券,但是當自己激動的等在電腦旁,手拿滑鼠、眼盯螢幕,等着倒計時慢慢臨近,期待搶到自己喜愛的優惠券,然而最終得到的往往是“券已搶完”
為了彌補手速的缺憾,今天我教大家如何用python搶優惠券,讓你的“手速”提高數十倍。
首先,我用浏覽器抓包發現,搶券過程是通過get請求實作的:
請求參數為:
主要就是key值,它是每個優惠券的标志參數,我們有3種方法可以找到它:
- 在原網頁中:
data-key的值即為上述的key值,我們可以用selenium從原網頁擷取key值,這種方法隻能用selenium操控浏覽器獲得key值。
2.抓包擷取傳遞key值的資料接口:
接口位址:
https://a.jd.com/indexAjax/getCouponListByCatalogId.html?&catalogId=134&page=1&pageSize=9&_=1588425128493
每頁傳回9個優惠券資訊,page代表頁碼,pageSize代表傳回數量。
Key值找到了,下面就可以用requests模拟搶券了,python模拟請求代碼如下:
import requests header={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0?', 'Referer':'https://a.jd.com/', 'Cookie': '寫入你的cookie'} key = '0271DFD6890D3B60ACB8BA8A9E49BEB17FE8E6323A36834B63FE69E95D38088EFCFCC41CEDA463F657AC10A29B05CD8C80317528B28221B996820855DF2962B519E4BCD69F2FAD2A6A0C71D95C08EC37657F57BE5FF35205CD6EB7B98375482F' session = requests.session() url1 = 'https://passport.jd.com/loginservice.aspx?&method=Login&_=1588432511753' response1 = requests.get(url1, headers=header)
url2 = 'https://a.jd.com/indexAjax/getCoupon.html?callback=jQuery708242&key={0}&type=1&_=1588433465288'.format(key) header={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0?', 'Referer':'https://a.jd.com/', 'Cookie': '寫入你的cookie'} response2 = requests.get(url2, headers=header)
我把代碼分成了兩部分,領券是由第二段代碼實作的,那麼為什麼要用第一段呢?
其實這是一種反爬措施,就是領券之前要先進行驗證,讓伺服器知道這是哪個使用者在領券。
第一段代碼的傳回結果為:
{"Identity":{"Unick":"小笨鳥","Name":"jd_100000000","IsAuthenticated":true}}
第二段代碼的傳回結果為:
jQuery708242({"code":"999","success":true,"message":"領券成功"})
将這兩段代碼合成一塊就是這次搶大額優惠券的代碼了。
以上介紹的隻是如何用python實作普通優惠券的領券過程,但我們要搶的券都是有倒計時的,是以,要加循環并檢測的功能,并在倒計時快結束了的時候循環運作程式:
while True: response2 = requests.get(url2, headers=header) response2.encoding='utf-8' if '領券成功' in response2.text: break
最後,展示一下批量領取優惠券的過程,代碼如下:
展示視訊:
除了不能領的,都顯示領取成功了:
學會這項技能,再也不怕搶不到券了!
2684億銷售額,是真是假?
去年雙11天貓官方公布了成交額為2684億元,成功重新整理了自己創下的商業紀錄。按理說大家已經習慣了逐年增長,沒想到由于過于完美,引發網友提出質疑。
滑動圖檔浏覽 or 點選檢視大圖
▼
我們且不評論是真是假,先想想我們能幹點什麼呢?
利用Python進行拟合并預測
我們在Python中可以利用numpy求解多項式以及多項式拟合。
嘗試用numpy的polyfit函數進行拟合,并作圖。
代碼如下:
import matplotlib.pyplot as plt
import numpy as np
x = np.array([year for year in range(2009,2019)])
y = np.array([0.5,9.36,52,191,352,571,912,1207,1682.69,2135])
z1 = np.polyfit(x, y, 3) # 用3次多項式拟合
p1 = np.poly1d(z1)
yvals=p1(x)
plot1=plt.plot(x, y, '*',label='實際銷售額')
plot2=plt.plot(x, yvals, 'r',label='拟合銷售額')
plt.xlabel('年份')
plt.ylabel('銷售額(億)')
plt.legend(loc=4) # 指定legend的位置
plt.title('2009-2018淘寶雙十一銷售額拟合曲線')
plt.figure(figsize=(10, 10))
plt.show()
print('拟合多項式:',p1) #列印拟合多項式
p1 = np.poly1d(z1)
print("-"*40)
print('2019年預測值:',p1(2019)) #列印預測值
運作結果:
利用三次多項式預測的資料與公布的結果确實很相近。
我們繼續搞事情。
将今年2019年的2684億導入,預測一下後面三年:
按照網上的陰謀論,後面幾年的資料應該如此。
看了網絡上的好幾篇文章,衆說紛纭。作為一個技術er,就不去對此事做評價了。
網絡大衆對此事的看法到底如何?不妨看下騰訊科技發起的一個投票。
大衆的看法就像這個投票。
除了以上這些,購物節的時候你可能還會遇到各種新的套路,最好的應對的辦法就是保持理性消費,還有學門Python,技術攻防!