网站首页 > 基础教程 正文
一、背景介绍
?
我们经常能看到京东上有满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代表返回数量。
三、python模拟请求
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)
我把代码分成了两部分,领券是由第二段代码实现的,那么为什么要用第一段呢?
其实这是一种反爬措施,就是领券之前要先进行验证,让服务器知道这是哪个用户在领券,在之前的文章中有详细介绍:细说小白学python爬虫过程中常见的反爬措施及解决思路(干货)
第一段代码的返回结果为:
{"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)?
除了不能领的,都显示领取成功了:
学会这项技能,再也不怕抢不到券了!
本文所述的代码已上传至【python的爬虫与数据分析之路】后台,请输入优惠券获取。另外,程序中出现的问题可以私聊我:
- 上一篇: SpringCloud系列——SSO 单点登录
- 下一篇:已经是最后一篇了
猜你喜欢
- 2024-12-19 SpringCloud系列——SSO 单点登录
- 2024-12-19 学习Java半年时间可以到哪种程度 学java半年能找到工作吗
- 2024-12-19 前端工程师都会遇到的nodejs常见问题和解决方案复盘
- 2024-12-19 Java后端学习路线梳理 java后端要掌握的知识
- 2024-12-19 真正的0基础如何学JAVA 零基础学java从哪里开始
- 2024-12-19 新必应用python写一个京东抢茅台的脚本,太实用了
- 2024-12-19 知了堂Java培训怎么样,都学习哪些内容
- 2024-12-19 Python爬虫大佬的万字长文总结,requests与selenium操作合集
- 2024-12-19 究竟是多深的功力!能一举拿下字节/腾讯/蚂蚁三大厂的前端offer
- 2024-12-19 Python爬虫神器:PyQuery,解析网页更简单,小白也能学会
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)