Python微信红包算法
2018-01-15 14:27
267 查看
sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频)
https://study.163.com/course/introduction.htm?courseId=1005269003&utm_campaign=commission&utm_source=cp-400000000398149&utm_medium=share
# -*- coding: utf-8 -*- import random import sys def randBonus(min, max, total,num): print min, max, total, num #print "{:.2f}".format(3.1415029) total = float(total) num = int(num) min = 0.01 if num < 1: return if num == 1: print "第%d个人拿到红包数:%.2f" % (num,total) return i = 1 totalMoney = total while(i < num): max = totalMoney - min*(num- i) k = int((num-i)/2) if num -i <= 2: k = num -i max = max/k monney = random.randint(int(min*100), int(max*100)) monney = float(monney)/100 totalMoney = totalMoney - monney print "第%d个人拿到红包为:%.2f, 余额:%.2f"%(i,monney,totalMoney) i += 1 print "第%d个人拿到红包为:%.2f, 余额:%.2f"%(i,totalMoney,0.00) if __name__ == '__main__': min = sys.argv[1] max = sys.argv[2] total = sys.argv[3] num = sys.argv[4] randBonus(min, max, total, num) 执行结果如下: fzxawang@fzxamatoMacBook-Pro ~$ python bonus.py 0.01 10 20 10 0.01 10 20 10 第1个人拿到红包为:0.18, 余额:19.82 第2个人拿到红包为:2.05, 余额:17.77 第3个人拿到红包为:5.27, 余额:12.50 第4个人拿到红包为:0.90, 余额:11.60 第5个人拿到红包为:0.35, 余额:11.25 第6个人拿到红包为:1.77, 余额:9.48 第7个人拿到红包为:2.31, 余额:7.17 第8个人拿到红包为:0.75, 余额:6.42 第9个人拿到红包为:6.24, 余额:0.18 第10个人拿到红包为:0.18, 余额:0.00
如何科学的抢红包:写个程序抢红包
http://www.cocoachina.com/programmer/20150225/11169.html
0×00 背景
大家好,我是来自IDF实验室的@无所不能的魂大人!
红包纷纷何所似?兄子胡儿曰:“撒钱空中差可拟。”兄女道韫曰:“未若姨妈因风起。”
背景大家都懂的,要过年了,正是红包满天飞的日子。正巧前两天学会了Python,比较亢奋,就顺便研究了研究微博红包的爬取,为什么是微博红包而不是支付宝红包呢,因为我只懂Web,如果有精力的话之后可能也会研究研究打地鼠算法吧。
因为本人是初学Python,这个程序也是学了Python后写的第三个程序,所以代码中有啥坑爹的地方请不要当面戳穿,重点是思路,嗯,如果思路中有啥坑爹的的地方也请不要当面戳穿,你看IE都有脸设置自己为默认浏览器,我写篇渣文得瑟得瑟也是可以接受的对吧……
我用的是Python 2.7,据说Python 2和Python 3差别挺大的,比我还菜的小伙伴请注意。
0×01 思路整理
懒得文字叙述了,画了张草图,大家应该可以看懂。
首先老规矩,先引入一坨不知道有啥用但又不能没有的库:
下载下来后运行setpy.py install安装,然后就可以开始我们的开发步骤了。
0×02 微博登陆
抢红包的动作一定要登陆后才可以进行的,所以一定要有登录的功能,登录不是关键,关键是cookie的保存,这里需要cookielib的配合。
接下来需要封装两个模块,一个是获取数据模块,用来单纯地GET数据,另一个用来POST数据,其实只是多了几个参数,完全可以合并成一个函数,但是我又懒又笨,不想也不会改代码。
0×03 指定红包抽取
成功登录微博后,我已迫不及待地想找个红包先试一下子,当然首先是要在浏览器里试的。点啊点啊点啊点的,终于找到了一个带抢红包按钮的页面了,F12召唤出调试器,看看数据包是咋请求的。
可以看到请求的地址是http://huodong.weibo.com/aj_hongbao/getlucky,主要参数有两个,一个是ouid,就是红包id,在URL中可以看到,另一个share参数决定是否分享到微博,还有个_t不知道是干啥用的。
好,现在理论上向这个url提交者三个参数,就可以完成一次红包的抽取,但是,当你真正提交参数的时候,就会发现服务器会很神奇地给你返回这么个串:
单个红包领取动作测试成功后,就是我们程序的核心大招模块了——爬取红包列表,爬取红包列表的方法和入口应该有不少,比如各种微博搜索关键字啥啥的,不过我这里用最简单的方法:爬取红包榜单。
在红包活动的首页(http://huodong.weibo.com/hongbao)通过各种点更多,全部可以观察到,虽然列表连接很多,但可以归纳为两类(最有钱红包榜除外):主题和排行榜。
继续召唤F12,分析这两种页面的格式,首先是主题形式的列表,比如:http://huodong.weibo.com/hongbao/special_quyu
可以看到红包的信息都是在一个类名为info_wrap的div中,那么我们只要活动这个页面的源码,然后把infowrap全抓出来,再简单处理下就可以得到这个页面的红包列表了,这里需要用到一些正则:
排行榜页面原理一样,找到关键的标签,正则匹配出来。
这个是比较简单的,首先在源码里搜一下关键字看看有没有抢红包按钮,然后再到领取排行里面看看最高纪录是多少,要是最多的才领那么几块钱的话就再见吧……
其中查看领取记录的地址为http://huodong.weibo.com/aj_hongbao/detailmore?page=1&type=2&_t=0&__rnd=1423744829265&uid=红包id
主要的模块都已经搞定,现在需要将所有的步骤串联起来:
基本的爬虫骨架已经基本可以完成了,其实这个爬虫的很多细节上还是有很大发挥空间的,比如改装成支持批量登录的,比如优化下红包价值算法,代码本身应该也有很多地方可以优化的,不过以我的能力估计也就能搞到这了。
最后程序的结果大家都看到了,我写了几百行代码,几千字的文章,辛辛苦苦换来的只是一组双色球,尼玛坑爹啊,怎么会是双色球呢!!!(旁白:作者越说越激动,居然哭了起来,周围人纷纷劝说:兄弟,不至于的,不就是个微博红包么,昨天手都撸酸了也没摇出个微信红包。)
唉,其实我不是哭这个,我难过的是我已经二十多岁了,还在做写程序抓微博红包这么无聊的事情,这根本不是我想要的人生啊!
源码下载:
weibo_hb.rar
作者/idf实验室(企业帐号)
python风控评分卡建模和风控常识
https://study.163.com/course/introduction.htm?courseId=1005214003&utm_campaign=commission&utm_source=cp-400000000398149&utm_medium=share相关文章推荐
- Python版微信红包分配算法
- Python版微信红包分配算法
- 关于微信红包简单算法 PHP Edition
- 关于微信手气红包算法的探讨
- 微信红包的算法实现探讨(基于PHP)
- Java仿实现微信红包分配算法
- 揭秘微信红包:架构、抢红包算法、高并发和降级方案
- Java仿实现微信红包分配算法
- java微信红包实现算法
- 关于微信红包的一些算法可能性
- PHP实现微信红包金额拆分试玩的算法示例
- Java版 微信红包算法
- 别人抢红包,程序员来探讨微信红包的算法实现
- 关于网上python红包算法。
- 微信红包算法
- 微信红包算法
- [算法] -- 微信红包算法
- [算法]微信红包
- 微信红包随机分配算法初探
- 微信红包的算法实现探讨(基于PHP)