欢迎访问移动开发之家(rcyd.net),关注移动开发教程。移动开发之家  移动开发问答|  每日更新
页面位置 : > > 内容正文

把抽奖活动写成一篇技术博客是怎样一种体验,抽奖活动一篇

来源: 开发者 投稿于  被查看 24429 次 评论:262

把抽奖活动写成一篇技术博客是怎样一种体验,抽奖活动一篇


把抽奖活动写成一篇技术博客是怎样一种体验

本次活动预备知识贴:天罗地网——Python爬虫初初初探

http://blog.csdn.net/eclipsexys/article/details/48193541

请一定先了解下,不然就真的是为了抽奖了!

抽抽抽抽抽抽奖

我的新书《Android群英传》上市不久,为了回报各位的大力推荐,也希望更多的人能多多支持,特准备此次抽奖活动。

抽奖对象

只要在本博客中留言,即可参与抽奖活动。

留言内容如下:

PS 请不要重复评论,虽然可以增加我的人气,但对抽奖概率,不会有丝毫影响哦。

PS 请不要欺骗医生真挚纯洁真诚善良的心!

PS 如果你不要我的书也不要我的补贴,但是你却中奖了,那请你直接来上海,浦软大厦703,我!请!你!吃!食!堂!。

奖品!!!

  • 未购买《Android群英传》的,奖品为签名版《Android群英传》一本(如果觉得我的字太丑,我也支持画押)
  • 已购买《Android群英传》的,奖品为报销你的买书钱

写书不易,一本书我只赚4块钱,请大家本着社会主义的核心价值观,请不要欺骗我真挚的感情~~~~

奖品数量

(comments / 40) + 1

截止时间

抽奖时间,暂定于2015年9月25日中秋前夕。希望给大家带来一份不错的中秋礼物。


下面是技术帖下面是技术帖下面是技术帖下面是技术帖


如何实现抽奖

抽奖的方式很简单,统计所有的有限留言,获取他们的用户名,通过随机数来确定中奖的人的用户名。

作为一个技术宅,我当然不想自己去统计,能自动化的就不要用女朋友,能写脚本的就不用女朋友。所以,本博客的实际目的在于教大家如何正确的去使用女朋友,哦,不对,是正确的使用脚本。

分析

首先我们来看CSDN博客的评论系统。

这里写图片描述

哎呀我真不是故意截这么多赞美的,请无视。

我们打开Chrome的审核元素:

用放大镜找到用户名:

这里写图片描述

然后点击右键去找源代码,可是,我们突然发现,不对呀,源代码中根本就没有这些评论信息啊。

哦,这样应该也对,评论的加载,应该是用ajax的吧,不然我们每次评论后,肯定会刷新整个页面咯。

OK,那么我们就来到Network标签,刷新页面,获取数据:

这里写图片描述

显示评论所调用的js,就在这些文件当中,我们慢慢找吧。

首先,我们尝试着先过滤几个关键字,比如 comment:

这里写图片描述

哎哟不错哦,第一个链接看上次嫌疑很大啊,点击右键,新窗口打开:

这里写图片描述

看来,英语好的人运气都不会太差。
这样我们就非常简单的获取了获得评论的地址:

http://blog.csdn.net/eclipsexys/comment/list/47405045?page=1

从URL可以看出来,只是加了个用户名作区分。

OK,下面我们可以通过:

还爬什么爬,直接请求这个接口,咱们就拿到这些数据了,所以,前面说的本篇的预备帖,好吧,其实是骗流量的。

实现

实现就非常简单了,尼玛,接口都有了,拿了数据,去除重复评论的、无效的评论、回复的评论,剩下的就是有效数据了。

上Python,让看了预备帖的人不至于扫兴而归:

# coding:utf-8

import requests
import json
import random


class Prize(object):
    def __init__(self):
        print u'开始抽奖啦'

    # 获取网页信息
    def getSource(self, url):
        head = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36'}
        html = requests.get(url, headers=head)
        html.encoding = 'utf-8'
        return html.text

    # 获取所有评论信息
    def getAllCommentInfo(self, source):
        return json.loads(source)['list']

    # 保存到文件
    def saveinfo(self, commentInfo):
        f = open('info.txt', 'w')
        for each in commentInfo:
            print each
            f.writelines('UserName:' + each + '\n')
        f.close()


if __name__ == '__main__':
    # 设定获奖人数
    winnerCount = 1
    userList = []
    url = "http://blog.csdn.net/eclipsexys/comment/list/47405045?page=1"
    androidHeros = Prize()
    html = androidHeros.getSource(url)
    commentsInfo = androidHeros.getAllCommentInfo(html)
    for each in commentsInfo:
        if '[reply]' not in each['Content'] and each['UserName'] not in userList:
            userList.append(each['UserName'])
    androidHeros.saveinfo(userList)

    for i in range(0, winnerCount):
        randomNum = random.randint(0, userList.__len__())
        winner = userList[randomNum]
        print '\n-------------------Winner : ' + winner + ' -------------------'

多说一句

技术,是为了实现实际的目的,这个世界上没有最好的语言,只有最适合的语言,请用最合适的语言去做最合适的事,拒绝做一个语言喷子,从你我他做起。 ——有感于某群中为了争论爬虫为什么不用Java写的人

切记

切记,是在本博客下留言!!!

抽奖结果

即将到来,请大家奔走相告,开始留言吧,评论的人,运气一般都不会太差。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关频道:

用户评论