34嘻刷刷

来源:互联网 发布:知乎搜索引擎地址 编辑:程序博客网 时间:2024/04/30 10:37

题目地址:http://www.qlcoder.com/task/7581
题目描述:

现在的互联网上充斥着非常大量的虚假信息,比如:

  • 微博僵尸粉
  • 淘宝刷单
  • 知乎刷赞
  • 垃圾邮件
    任何一个UGC性质的网站都需要做好一个基本功:识别哪些是真实用户沉淀的内容,哪些是程序模拟真实用户产生的恶意行为。
    一般各个公司都会有一个专门的anti-spam team,而若远同学就是其中一员,专注防刷30年……
    这里有一个颜值最高coder评选排行榜。
    用户可以上传他认为颜值最高的coder的名字及其头像,并为他点赞,当被点赞数超过1000的coder,通过此题。
    当然,一般点赞这种行为会设计一个验证码来区别您是普通人还是机器。
    我们网站是coder专享的,验证码当然会难一点啦~
    这里的验证码是一个自然数x,使得md5(当天日期+你的用户名+当前的票数+x)的前6位都是0。
    举例: 假如2015年12月4号食年已经拿到了1014票,当想投食年第1015票的时候,验证码可以是12011618。
    因为20151204shinian101412011618的md5值是0000003A19CF73CF3E9799219A9FFF4F,这个md5前6位都是0。
    当你的票数超过1000,再次投票即可看见答案。
    方案设计
import hashlibimport urllib.parseimport urllib.request# 当前的日期date = '20170919'# 用户名username = '方程同调士'# 当前的票数count = 0while count<1002:    x = 0    string = date + username + str(count) + str(x)    md5 = hashlib.md5(string.encode('utf-8')).hexdigest()    while md5[:6] != '000000':        x = x + 1        string = date + username + str(count) + str(x)        md5 = hashlib.md5(string.encode('utf-8')).hexdigest()    # 构造url    print("第"+str(count)+"个checkcode="+str(x))    params = urllib.parse.urlencode({        "_token" : "z3aUUKwf05BdwAOyauTS452Sy4X68MgoPYhxhBSo",        "user" : username,        "checkcode" : str(x)    })    url = "http://www.qlcoder.com/train/handsomerank?" + params    header = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.104 Safari/537.36'}    req = urllib.request.Request(url,headers=header)    res=urllib.request.urlopen(req)    html = res.read()    if count==1001:        print(res.decode(encoding='utf-8'))    count = count + 1