把抽奖活动写成一篇技术博客是怎样一种体验
本次活动预备知识贴:天罗地网——Python爬虫初初初探
http://blog.csdn.net/eclipsexys/article/details/48193541
请一定先了解下,不然就真的是为了抽奖了!
抽抽抽抽抽抽奖
我的新书《Android群英传》上市不久,为了回报各位的大力推荐,也希望更多的人能多多支持,特准备此次抽奖活动。
抽奖对象
只要在本博客中留言,即可参与抽奖活动。
留言内容如下:
- 已购买《Android群英传》的朋友,请在微博中发帖并@Tomcat的猫 (http://weibo.com/1904977584),并在本博客中贴出你的微博地址
- 或者直接贴出购买链接的地址,并告知我你的用户名
- 如果你还未购买,那就帮忙转发微博(宣传本书即可,最好配图哈),获得15个以上赞(我肯定会帮你赞的哈~~),并在本博客中贴出你的微博地址
- 以前在微博、微信中已经宣传过的,只要在评论中@我一下,并在本博客中留言——“已宣传”,并写上你的微信号,就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,下面我们可以通过:
- 通过Python爬取动态加载的网站
- 通过Scrapy框架进行爬虫搜索
- 尼玛,这就是返回了一个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写的人
切记
切记,是在本博客下留言!!!
抽奖结果
即将到来,请大家奔走相告,开始留言吧,评论的人,运气一般都不会太差。
就在刚刚,新鲜出炉的抽奖结果,请让我大声念出来!!!
E:\python\python.exe G:/csdn/csdn.py
开始抽奖啦
jingxia2008
yanyangy_js
u013814553
onlyellow
jiang89125
S938548157
u011775829
kinglearnjava
bc_2014621
u013369232
wenwen091100304
asq1755
dongfeng9ge
solidajun
caigen0001
coder_nice
qq2603825424
a15996088263
u013349626
qmhs815
sbsujjbcy
zhuyaozong
longwanglidfdfdf
u010334329
u010649376
Plcsy2012
F1ReKing
wakewakewake
u014400934
marktheone
oushangfeng123
WX_LYB
csdnwangzhan
hlglinglong
u014626094
nimengbo
forzajuve_android
freestyle_zmy
u013211506
supertian007
www5115zy
onlybone
baidu_27869435
sinat_16653803
freexiaoyu
fewwind
AlbertDenver
u011326653
cxmscb
fmlfch
lingling_a
gao_chun
lianwanfei
lw1075219814
Jasonez
u012403246
yayun0516
sinat_26871969
meng209292
xiaruoli89
u013364442
fanaidehua
jijiaxin1989
xxx823952375
cicf1986
y1scp
xiaozhonghuaa
wanghao200906
u010026245
WXY9206
u011934921
u014495711
Dakaring
darryl0912
wavever
Youzh178
muyuhema
yeyuxp
y505772146
rh1910362960
msdgw
beckett1216
u014061684
chen41345507
u010850027
u012138153
daijianweinihao
u012994271
elsdnwn
aqswde35025
lianlianzhuifeng
a06_kassadin
DaoFeng905147
feijixiaoyu
went0213
github_31318977
m75100313
lijun123456789lijun
fhkatuz674
adhere534
h1252680267
Fulgens
kainkain1988
u012293381
u014679097
ElinaVampire
zhanghongliubob
Kamingnnnnng
cwc455826074
liu470368500
-------------------Count : 110 -------------------
-------------------Winner : AlbertDenver -------------------
-------------------Winner : y1scp -------------------
-------------------Winner : wanghao200906 -------------------
Process finished with exit code 0
总计有110位网友留言,本来留言是有要求的,但是尼玛都太不按常理出牌了,所以就只是过滤了重复的和回复的,如果你没转发微博、没赞,你TMD还抽中了,我只能说——你赢了!!!
结果如下:
中奖的三个人:
wanghao200906: 我感觉会中奖。昨天踩了狗屎
y1scp : 恳请大家尊重原创正版 人人做到自己不触碰不制造盗版、PDF电子版!徐大大,我是来支持你的。
AlbertDenver : 支持医生……http://weibo.com/2104204754/CAN1VliSA
恭喜你们了,特别是那个昨天踩了狗屎的,真的没白踩啊。。。。。
我已经发私信给你们了,要签名版还是购书费,你们说了算,请毫不客气的联系我!!!