之前说了要抽两本书的,今天搞完论文的事情,刚去吃了散伙饭回来。草草写了个抽奖脚本,抽帖子 https://www.v2ex.com/t/457319 和 https://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 代码在我机器上运行是没问题的哈[狗头]
1
kslr 2018-06-07 06:22:08 +08:00 via Android
如果得知总回复数随机抽出数字,是不是节省很多时间了
|