IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

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

    x359981514发表于 2015-09-15 10:15:25
    love 0

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

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

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

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

    抽抽抽抽抽抽奖

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

    抽奖对象

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

    留言内容如下:

    1. 已购买《Android群英传》的朋友,请在微博中发帖并@Tomcat的猫 (http://weibo.com/1904977584),并在本博客中贴出你的微博地址
    2. 或者直接贴出购买链接的地址,并告知我你的用户名
    3. 如果你还未购买,那就帮忙转发微博(宣传本书即可,最好配图哈),获得15个以上赞(我肯定会帮你赞的哈~~),并在本博客中贴出你的微博地址
    4. 以前在微博、微信中已经宣传过的,只要在评论中@我一下,并在本博客中留言——“已宣传”,并写上你的微信号,就OK了

    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,下面我们可以通过:

    1. 通过Python爬取动态加载的网站
    2. 通过Scrapy框架进行爬虫搜索
    3. 尼玛,这就是返回了一个Json啊

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

    实现

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

    上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写的人

    切记

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

    抽奖结果

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



沪ICP备19023445号-2号
友情链接