价格先升后降?薅不着的大额优惠券?造假销售额?Python帮你一一识破购物节套路

购物节真的便宜吗?

 

月薪上万的白领们为了2块5毛钱的优惠券起早贪黑,也是堪称人类迷惑行为大赏了……

 

问题是,你以为自己真的赚到了?

 

商品“明降暗升”的传言早有耳闻:很多商品在双十一之前早早地把价格调高,加上优惠之后也不过就是跟以前的原价相当。让不知情的消费者在心理上感觉占了便宜。

 

这个传言是不是真的,很好判断,只要定期去访问商品页面,记录价格就可以。不过一般人也没闲工夫这么去做。

 

于是,我用 Python 做了一个可以定时监控商品的小工具,可以帮你监控想要关注的商品。

 

工具完成之后,我们随机挑选了几个商品作为测试,结果就有一个中招了……(真的是随便选的):

 

 

这款保暖背心产品,之前标价 39.9元,到11月之后却突然调价为 49.9元,并标注上了“双11狂欢价”,也就是原价……

 

 

代码实现:

 

识别套路的代码其实并不复杂,主要就2点:

 

1. 首先要设定你要监控的商品地址,通过 requests 库获取商品信息。

  •  
  •  
  •  
import requestsurl = '商品链接地址'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种方法可以找到它:

  1. 在原网页中:

 

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 requestsheader={'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

最后,展示一下批量领取优惠券的过程,代码如下:

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
#批量领取优惠券代码# 公众号【python的爬虫与数据分析之路】import requestsimport jsonheader={    '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':'写入你的cookie'}for i in range(3):#获得key值    url='https://a.jd.com/indexAjax/getCouponListByCatalogId.html?callback=jQuery8020514&catalogId=134&page={0}&pageSize=9&_=1588487277055'.format(i+1)    response = requests.get(url, headers=header)    items=json.loads(response.text[14:].replace(')', ''))    for key in items['couponList']:        key=key['ruleKey']        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'}        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)        response2.encoding = 'utf-8'        print(response2.text)

 

展示视频:

 

 

除了不能领的,都显示领取成功了:

学会这项技能,再也不怕抢不到券了!

 

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,技术攻防!

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值