V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
ml1344677
V2EX  ›  程序员

v2 抽奖代码

  •  
  •   ml1344677 · 2018-06-07 01:28:43 +08:00 · 1341 次点击
    这是一个创建于 2386 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前说了要抽两本书的,今天搞完论文的事情,刚去吃了散伙饭回来。草草写了个抽奖脚本,抽帖子 https://www.v2ex.com/t/457319https://www.v2ex.com/t/459938 里的人。写好之后发现可以用楼层数抽就好了....尴尬。贴上渣代码和抽奖结果。不知道如何在 v2 上优雅的放代码哈,随意排版了下。 def get_html(url):

    cookies = ''
    
    re = request.Request(url)
    
    re.add_header('cookie', cookies)
    
    re.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64) '
                                'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36')
                                
    return request.urlopen(re).read().decode('utf-8')
    

    def get_user_by_id(id):

    page = etree.HTML(get_html('https://www.v2ex.com/t/' + str(id))) 
    message_num = page.xpath('//*[@id="Main"]/div[4]/div[1]/span/text()[1]')[0].split(' ')[0]  # 回复数 确定翻页次数
    print('共有', message_num, '条回复')
    page = math.ceil(int(message_num) / 100)
    print('共有', page, '页')
    user_list = []
    for i in range(1, page + 1):
        url = 'https://www.v2ex.com/t/' + str(id) + '?p=' + str(i)
        print(url)
        divs = etree.HTML(get_html(url))
        res = divs.xpath('//*[@id="Main"]/div[4]//a[@class="dark"]')
        for info in res:
            user_list.append(info.text)
            print(info.text)
        print(len(user_list))
    return user_list
    

    def main():

    id_list = [459938, 457319]
    user_list = []
    for id in id_list:
    	user_list.extend(get_user_by_id(id))
    print('共有', len(user_list), '个人回复')
    print('去重后还有', len(set(user_list)), '个人')
    prizer = random.sample(set(user_list), 2)
    print(prizer)
    

    共有 322 个人回复 去重后还有 298 个人 ['JohnChiu', 'Keepall']

    没有特殊要求我就按顺序给你们发第一第二本了 如果有的话 你们自行商量哈。

    vx:cTM5ODU1NjA1Mw==

    ps 代码在我机器上运行是没问题的哈[狗头]

    5 条回复    2018-06-09 22:47:38 +08:00
    kslr
        1
    kslr  
       2018-06-07 06:22:08 +08:00 via Android
    如果得知总回复数随机抽出数字,是不是节省很多时间了
    ml1344677
        2
    ml1344677  
    OP
       2018-06-07 22:35:55 +08:00
    @kslr 这样不能去重
    kslr
        3
    kslr  
       2018-06-08 01:19:12 +08:00
    @kslr #1 数字去重不也很简单
    ml1344677
        4
    ml1344677  
    OP
       2018-06-08 23:54:49 +08:00
    @kslr 有个人重复回复了 2 次 怎么把他的所在楼层的数字确定出来然后去掉只剩 1 次
    kslr
        5
    kslr  
       2018-06-09 22:47:38 +08:00
    @ml1344677 #4 把 ID 换用户名
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3090 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 13:41 · PVG 21:41 · LAX 05:41 · JFK 08:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.