周五晚上花了一点时间用python写了一个刷互动力量投票系统的工具,原理很简单,先在代理网站上找代理IP,然后模拟http的方式,用urllib提交数据。这里有一些细节控制,修改一下user_agent,不然会在投票系统的服务器日志里显示“python/urllib”的user_agent信息。
我没有处理验证码这一块,因为我要刷的那个投票恰好没有验证码;就算有,那个验证码也是很有规律,用PIL或者自己写算法来分析也不是难事。
下面是整个刷票的程序,大约就20多行代码,非常简练。
#!/usr/bin/python #-*-coding:utf-8-*- import urllib,urllib2 import re import sys if len(sys.argv) != 3: sys.stderr.write("Usage: begin page num, end page num\n") raise SystemExit(1) start = int(sys.argv[1]) end = int(sys.argv[2]) for i in range(start,end): f = urllib.urlopen("http://www.proxycn.com/html_proxy/http-"+str(i)+".html") html = f.read() proxies = re.findall("clip\('(.*?)'\)",html,re.S) for n,proxy in enumerate(proxies): print str(n+1)+" "+proxy proxy_handler = urllib2.ProxyHandler({'http': 'http://'+proxy}) data = urllib.urlencode({'vote_id':12345,'question_id':67890}) request = urllib2.Request("http://vote.activepower.net/script/user/get_vote_save.asp") request.add_header('User-Agent', 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)') opener = urllib2.build_opener(proxy_handler) try: ff = opener.open(request,data,5) except: print "time out"