Python爬虫教程:你还在苦苦拉票吗?刷票案例原理剖析
你还在苦苦拉票吗?
- 前言
- 剖析投票原理
- 处理思路
- 具体实战
- 主要流程
- 具体细节python
- 代码实例python
- 具体细节java
- 代码实现java
- 总结
前言
文章插图
现在生活中离不开各类的比赛 , 然而 , 各个比赛离不开投票 , 我们会清一色有时候找到我们的朋友在朋友圈发—帮宝贝投一票 , 帮某某老师 , 学生投一票 。 又或许你自己参加比赛 , 你在为你自己拉票 。
剖析投票原理作为一名程序员 , 你是否想为自己的生活开一点G呢?熟悉网络请求的我们 , 应该从问题根源分析问题 。 对于一个投票的网站 。 大致分为两类:
- 登录类:这类网站是确实不太好操作 , 一般是每个账户每天能够刷若干票 。 因为账户的资源是有限的 , 我们很难通过获取大量的账户资源为我们服务 。 况且 , 一般的登录稍微大厂或者技术高点其中的js加密会比较复杂 , 对于普通人js水平不高很难行的通这条路 。 比如常见需要微信登录 , qq登陆的网站投票 , 就很难开挂 。
- 非登录类:并不是所有网站都有腾讯的登录授权的 , 有很多他们自己的官网他们自己就是一个体系 。 这类网站普通人或许也感觉不到差异:投几票之后也不能投 。 然后纷纷找朋友帮忙投 。 剖析这类网站 , 既然没有登录机制 , 那么它就是根据ip机制进行鉴定 。 因为正常你的公网ip相对来说是稳定 。 所以正常一个用户只能投固定的几票 。 或许高级一点他会和浏览器信息结合鉴定 , 但这种还是比较少的 。
然而最重要的就是ip代理 , 你要用代理的ip去访问那个接口 , 让对方以为是你代理的那个ip再对他访问 , 所以你需要维护一个代理ip池 。 对于代理ip池 , 并不是什么高大上的东西 , 准确的来说就是一个集合中包含一些可用的ip , 能够供我使用 。 市面上也有很多出售代理ip , 也不贵 。 我用的是蘑菇代理 。
具体实战主要流程碰巧 , 最近参加的一个比赛就有拉票环节 , 如果人为手动拉票的话效率地下 , 并且你肯定也不会愿意天天去舔人家求情 。 那就自己分析一波!
- 首先 , 打开你在的网站(有的手机端 , 电脑端好抓包可调) , 谷歌或者其他浏览器F12抓包 , 点击network , xhr准备(肯定是ajax请求不用想) 。
- 分析这个请求的重要参数.(header)找到url和几个参数 , 就可以准备程序了 。 模拟请求了
- 多线程:python虽然多线程有个全局锁大大的影响效率 。 但是对于io请求型多线程还是能有一定的提速的 。 因为io有大量的线程等待 。 多线程的模块大致为定义一个线程类 , 定义初始方法和run函数 。 然后在外面定义几个线程 , 让他们跑任务 。
- ip处理和资源处理正常的ip代理是一群ip随机抽取其中作为代理ip , 进行爬取任务 , 然后ip失效从ip池中删除 。 而url的链接一般放到线程安全的全局容器中一个个抛出 。 ip放到list或者redis中进行维护 , 做好try catch异常即可 。 但是这个刷票只有一个url 。 并且一个ip只能用有限次数 。 所以换个思路 , url不需要容器维护 。 而ip用队列维护最好 , 并且python的队列是线程安全的 。 所以整个程序的架构也就很清晰了 。 只需要用个queue解析ip获取的格式进行相应储存 。 然后被消费 , 当少于一定个数时 , 请求api获取ip进行填充 。
- 在预处理方面 , 以前介绍过另一个蘑菇代理使用和ip池类似的问题 , 可以预先参考 。
import requestsimport randomimport timeimport threadingfrom queue import Queuedef loadip():url2 = ';count=20 WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'}formData = http://kandian.youth.cn/index/{'Referer':';isappinstalled=0','id':'17','times':'1','activity':'minichallenge1'}proxies = {'http': '182.247.92.99:21136',}loadip()time.sleep(5)threadList = ['thread-1','thread-2','thread-3','thread-4','thread-4']for j in threadList:thread = downspider(j, que)thread.start()threads.append(thread)for t in threads:t.join()
- 缩小|调整电脑屏幕文本文字显示大小,系统设置放大缩小DPI图文教程
- 告诉|阿里大佬告诉你如何一分钟利用Python在家告别会员看电影
- Python源码阅读-基础1
- Python调用时使用*和**
- 如何基于Python实现自动化控制鼠标和键盘操作
- 解决多版本的python冲突问题
- 学习python第二弹
- 更改计算机待机睡眠状态时间方法,电脑设置关闭显示器时间教程
- 随身携带「Windows」Windows To Go制作教程
- Python中文速查表-Pandas 基础