使用免费ip代理进行投票
2017-09-09 14:31
375 查看
只要是投票系统,必然要限制一个用户投多张票。
如何限制呢?限制ip是最直观最简单的思路,可是代理池可以解决限制ip的情况。
如果投票页面前面加上一个验证码,那程序就会有点困难了。
有些投票使用微信号,一个微信号只允许投一张票。这个其实是非常安全的。因为微信号的获取比ip的获取麻烦多了。人们可以很容易地制造出ip池,却难以构造一个微信号池。
于是,如何限制用户就很简单了:什么东西是一人一份并且人们不会把自己的借给别人用。
回到本文上来,限制ip可以用代理池应对。
ip代理池网上有很多收费的,也有很多免费的。
编一个爬虫把ip地址爬下来,构成一个ip库。逐个尝试这个ip库,对于每个ip直到被封了就切换ip,直到把全部ip库试玩一遍。如果还没有完成任务,重新从免费ip代理网站上爬取ip库。
如何限制呢?限制ip是最直观最简单的思路,可是代理池可以解决限制ip的情况。
如果投票页面前面加上一个验证码,那程序就会有点困难了。
有些投票使用微信号,一个微信号只允许投一张票。这个其实是非常安全的。因为微信号的获取比ip的获取麻烦多了。人们可以很容易地制造出ip池,却难以构造一个微信号池。
于是,如何限制用户就很简单了:什么东西是一人一份并且人们不会把自己的借给别人用。
回到本文上来,限制ip可以用代理池应对。
ip代理池网上有很多收费的,也有很多免费的。
编一个爬虫把ip地址爬下来,构成一个ip库。逐个尝试这个ip库,对于每个ip直到被封了就切换ip,直到把全部ip库试玩一遍。如果还没有完成任务,重新从免费ip代理网站上爬取ip库。
import re import requests from pyquery import PyQuery as pq # 查看投票界面,返回候选人信息列表 def seepage(out=True): resp = requests.get( "http://www.ciotimes.com/index.php?m=toupiao&c=index&a=init&formart=fx&from=timeline&isappinstalled=0") html = pq(resp.text) box = html(".liebiao-bottom-box") # 候选人列表 people = [] for i in range(box.length): it = box.eq(i) name = it(".liebiao-name").text() name = re.sub('\s', '', name) desc = it(".liebiao-jieshao").text() id_ = it(".liebiao-button-box button").val() value = it(".liebiao-piaonum span").text() if out: print(name, desc, id_, value) people.append({ 'name': name, 'desc': desc, 'id': id_, 'value': value }) return people # 按照proxy给id投票,返回投票是否成功 def toupiao(id, proxy): id = str(id) try: resp = requests.get("http://www.ciotimes.com/index.php?m=toupiao&c=index&a=add_form&id=" + id, proxies={ 'http': proxy }, timeout=2) return int(resp.text) except: return -1 # 查看id候选人当前票数 def howmany(id): for i in seepage(out=False): if i['id'] == id: return i['value'] # 从网上免费ip池中,获取ip列表 def getips(): urls = ["http://www.xicidaili.com/nn", "http://www.xicidaili.com/nt", "http://www.xicidaili.com/wn", "http://www.xicidaili.com/wt"] ans = [] for i in urls: resp = requests.get(i, headers={ "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8", "Accept-Encoding": "gzip, deflate", "Accept-Language": "zh-CN,zh;q=0.8", "Cache-Control": "max-age=0", "Connection": "keep-alive", "Host": "www.xicidaili.com", "Upgrade-Insecure-Requests": "1", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36" }) trs = pq(resp.text)("#ip_list tr") for j in range(trs.length): tr = trs.eq(j) tds = tr("td") if len(tds) != 10: continue ip = tds.eq(1).text() port = tds.eq(2).text() ans.append(ip + ":" + port) return list(set(ans)) # 给id候选人投票cnt次,如果失败了就换ip def go(id, cnt): counter = 0 while counter < cnt: for i in getips(): print(i) while toupiao(id, i) == 0: counter += 1 print(counter) if counter >= cnt: return go(194, 1000)
相关文章推荐
- 使用免费ip代理进行投票
- python 爬取西刺免费代理ip 并使用telnetlib.Telnet验证是否有效
- python3中使用requests和beautifulsoup爬取西刺免费代理IP 入库mongo!
- 如何利用C#编写网页投票器程序 如何使用代理来投票 代理IP来投票
- 如何利用C#编写网页投票器程序 如何使用代理来投票 代理IP来投票
- 使用python为爬虫获取免费代理ip
- 使用TaskManager爬取2万条代理IP实现自动投票功能
- 【转】如何利用C#编写网页投票器程序|如何使用代理来投票|代理IP来投票
- 如何利用C#编写网页投票器程序 如何使用代理来投票 代理IP来投票
- java使用javax.mail进行免费的邮件发送
- C#使用TCP/IP与ModBus进行通讯
- 使用Ip/tcp协议进行文件传送
- 国外免费代理 IP 公布 免费资源搜搜搜 免费资源搜搜搜 缘思
- 使用vue-cli脚手架 与 axios 请求数据 配置代理进行跨域访问数据问题
- 在silverlight中进行网络交互(下) 使用代理与web服务交互
- 解决Centos6无法使用setup工具进行ip配置
- nginx使用反向代理时获取用户IP
- 免费的国内代理服务器、国内代理IP地址
- node.js使用免费的阿里云ip查询获取ip所在地