www.4688.comHack On Douyu — 1

moba游戏的初衷本来是平衡化与比赛性,但近来初用户的震慑游戏竞技感受及人民币玩家破坏平衡,都一针见血刺着即款游戏的中坚地点,不仅惊叹如今几年用心创建快乐的tx游戏难怪被网易后来者居上,公司如又追商业利益,而无有业界良心的说话,一款款打的高中级力量——深度玩家的消解只会加紧这款游戏之上进,最终由成熟走向衰亡。

弹幕数据得到

时不时看斗鱼直播的同班肯定晓得“弹幕大神”那么些词,我早期想只要抓取弹幕的目标是眷恋透过大气底得直播中弹幕数据进行一些自然语言分析,由于那个东西平昔未曾念,也就是从不还搞,可是,通过弹幕,可以抱到当全频段广播的运载火箭消息,长日子监测这些数量应为是均等起有意思的工作。
说干就干,想使拿走到直播中的弹幕数据不同为头所说之页面数据抓取,好以斗鱼官方也供了一个赢得弹幕的路斗鱼弹幕服务器第三正值接抱协议,文档中针对哪些拿到弹幕数据、以及弹幕消息类有切实可行的注明,这吗大大降低了收获弹幕数据的难度。
在押罢是协议下,通过确立及弹幕服务器的tcp连接,可以不断的博到弹幕数据,我用的凡socket这个库。

HOST = 'openbarrage.douyutv.com'
PORT = 8601
RID = 97376
LOGIN_INFO = "type@=loginreq/username@=qq_aPSMdfM5" + \
    "/password@=1234567890123456/roomid@=" + str(RID) + "/"
JION_GROUP = "type@=joingroup/rid@=" + str(RID) + "/gid@=-9999" + "/"
ROOM_ID = "type@=qrl/rid@=" + str(RID) + "/"
KEEP_ALIVE = "type@=keeplive/tick@=" + \
    str(int(time.time())) + "/vbw@=0/k@=19beba41da8ac2b4c7895a66cab81e23/"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

每当这边,需要留意几独变量: host port roomid gid
。其中HOST是弹幕服务器地址,port是对外开放的端口,roomid则是主播间对应的id,gid是设加盟的弹幕频道,-9999频道可以取拿到有弹幕,也就是是“海量弹幕”频道。

def get_Hotroom():
    hotroom = roomcol.find().limit(1).sort(
        [("audience", pymongo.DESCENDING), ("date", pymongo.DESCENDING)])
    for item in hotroom:
        return item["roomid"]

def create_Conn():
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((HOST, PORT))
    RID = get_Hotroom()
    print "当前最热房间:", RID
    LOGIN_INFO = "type@=loginreq/username@=qq_aPSMdfM5" + \
        "/password@=1234567890123456/roomid@=" + str(RID) + "/"
    print LOGIN_INFO
    JION_GROUP = "type@=joingroup/rid@=" + str(RID) + "/gid@=-9999" + "/"
    print JION_GROUP
    s.sendall(tranMsg(LOGIN_INFO))
    s.sendall(tranMsg(JION_GROUP))
    return s

之后,通过get_Hotroom()获取到即极热房间(人数最为多之房),通过create_Conn()建立与服务器的连年。连接起后虽好心满意足之获取并保存弹幕数据了:

def insert_msg(sock):
    sendtime = 0
    while True:
        if sendtime % 20 == 0:
            print "----------Keep Alive---------"
            try:
                sock.sendall(tranMsg(KEEP_ALIVE))
            except socket.error:
                print "alive error"
                sock = create_Conn()
                insert_msg(sock)
        sendtime += 1
        print sendtime
        try:
            data = sock.recv(4000)
            if data:
                strdata = repr(data)
                if "type@=spbc" in strdata:
                    get_rocket(data)
                if "type@=chatmsg" in strdata:
                    get_chatmsg(data)
        except socket.error:
            print "chat error"
            sock = create_Conn()
            insert_msg(sock)
        time.sleep(1)

每20秒为服务器发送一长KEEP_ALIVE用以使连接保活,通过取得到之多寡特点,将普通聊天弹幕和运载火箭广播弹幕区分开来,并且保留于不同的数据库被之所以为日后提供不同之用途。
弹幕数据拿到大致是这样的:

www.4688.com 1

收获弹幕

分析至此,也感慨虽然手游市场前几日改为第一非凡娱乐产业市场,但迫切的现状,有诚意之一日游随笔屈指可数,愿就道清流发展壮大,让手游市场经验双重同轮子洗牌,手机APP产品迎接新一轮的革命发展。

继续内容

至此,此种之数码拿到工作一度好,在属下去少篇内容会独家介绍怎么样利用这一个多少构建页面,以及以这多少个过程遭到相见的题材。

君荣耀,再同浅当协调操作尽力,全队杀敌数多超出对方的意况下,失利。作为一个生出立简单年上荣耀游戏经验的纵深玩家,气愤的余,写来东西说说顿时款打。

开播房间数目拿到

采纳python抓到手了数码的同室肯定对requestBeautiful
Soup
立片个仓库不生疏。
名http for
humans的requests缺失不是欺世盗名,他当页面数据的抓取上真简单明了。
便状态下,requests和Beautiful
Soup配合以。以对斗鱼当前直播间的抓取为例:

# -*- coding: utf-8 -*-
from bs4 import BeautifulSoup  # 导入BeautifulSoup,提取网页中目标元素
import re                       # re 正则表达式,在快速查找和过滤元素中有出色表现
import requests                 # reqeusts 用以获取页面数据
from datetime import datetime
from pymongo import MongoClient

率先河入上述这几乎独仓库,然后可以伪造http请求header,这样可以减小爬虫被服务器ban掉的也许。

HOST = "http://www.douyu.com"
Directory_url = "http://www.douyu.com/directory?isAjax=1"
Qurystr = "/?page=1&isAjax=1"

agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.86 Safari/537.36'
accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"
connection = "keep-alive"
CacheControl = "no-cache"
UpgradeInsecureRequests = 1
headers = {
    'User-Agent': agent,
    'Host': HOST,
    'Accept': accept,
    'Cache-Control': CacheControl,
    'Connection': connection,
    'Upgrade-InsecureRequests': UpgradeInsecureRequests
}

然后就是是开播房间数量的取与入库:

cli = MongoClient(host="ip",port=xxx)
db = cli["Douyu"]
col = db["Roominfo"]


def get_roominfo(data):
    if data:
        firstpage = BeautifulSoup(data)
        roomlist = firstpage.select('li')
        print len(roomlist)
        if roomlist:
            for room in roomlist:
                try:
                    roomid = room["data-rid"]
                    roomtitle = room.a["title"]
                    roomtitle = roomtitle.encode('utf-8')
                    roomowner = room.select("p > span")
                    roomtag = room.select("div > span")
                    roomimg = room.a
                    roomtag = roomtag[0].string
                    date = datetime.now()
                    # now = datetime.datetime(
                    # date.year, date.month, date.day, date.hour, date.minute)
                    if len(roomowner) == 2:
                        zbname = roomowner[0].string
                        audience = roomowner[1].get_text()
                        audience = audience.encode('utf-8').decode('utf-8')
                        image = roomimg.span.img["data-original"]
                        word = u"万"    # 在页面中获取的房间人数以万为单位的str需要转换为int型,以便入库
                        if word in audience:
                            r = re.compile(r'(\d+)(\.?)(\d*)')
                            data = r.match(audience).group(0)
                            audience = int(float(data) * 10000)
                        else:
                            audience = int(audience)
                        roominfo = {
                            "roomid": int(roomid),
                            "roomtitle": roomtitle,
                            "anchor": zbname,
                            "audience": audience,
                            "tag": roomtag,
                            "date": date,
                            "img" : image
                        }
                        col.insert_one(roominfo)
                    # print roomid,":",roomtitle
                except Exception, e:
                    pass


def insert_info():
    session = requests.session()
    pagecontent = session.get(Directory_url).text
    pagesoup = BeautifulSoup(pagecontent)
    games = pagesoup.select('a')
    col.drop()
    for game in games:
        links = game["href"]
        gameurl = HOST + links + Qurystr
        print gameurl
        gamedata = session.get(gameurl).text
        get_roominfo(gamedata)

自己平时习惯使用mongodb作为数据存储,首先建立与数据库的连续,然后经过获取斗鱼当前有着房间分类,接着逐一获取每个分类中开播的房间数量,并记下每个屋子的roomid(房间号,斗鱼直播间唯一标识)、roomtitle(房间标题)、anchor(主播id)、audience(观众人数)、tag(房间所属分类)、date(数据拿到时间)、img(直播中封面图片)。通过定时执行这些脚本,可以得当前观众人数最多的房(平时大都是lol的直播
=。=),也得以事后通过roomid查询到关于对应直播间必要之音。

乘势社交手游的普及化,tx收购拳头公司,并以外来下端游产品英雄联盟(lol)改编成手游,模仿过超越高,技能相似性极大,换汤不换药的化名为王荣耀,大赚特赚,长时间高居手游收入榜第一。但经贸的营业,问题多。新手玩家过量涌入,为了赚英雄和皮大量生产,乃至玩游戏的耗流量问题也发出每月包流量的缓解方案。这个还让游戏的感想开首转移差,新手玩家没有正确指引,只会让每局的游艺团队配合进一步差,新英雄之面世,过于bug化,又催生大量人民币玩家影响平衡,而流量包更是以召开活动时恶意默认你订阅了流量包,每月自动扣费购买,我花了好特别劲才退订流量包,其中恶意之用心,更加深了我对这款游戏的感受。

离上次更新还要有一段时间了,毕业答辩之后,确实和同班等齐声出来嗨了一段时间,由于还尚未入职,在家清净的条件受到得好好学一下直感兴趣的东西啊。

君毒药,再见

直接本着纱爬虫很感兴趣,所以就是开学卓殊想念学的python,用了下也是感到分外棒。期间抓了包括天涯论坛、豆瓣、煎蛋还发生个壁纸网站的数目,而办案去极端多之抑直播网站斗鱼。数据抓下去将来如何行使是只问题,我的措施是为此这一个数量经过python的web框架flask搭建筑一个网站,也毕竟及时段时日之学收获。网站的构建自然少不了前端,也是刚在头皮上了bootstrap,精通了有的css、javascript的学问。这段时光的上学成果至关重如若LearningFlaskBeautifulPicsDanmuDouyuFan眼看六个门类(由于也是刚接触python,代码质地可能未是很是高
-。-)。而最终这一个DouyuFan算是对前面几独品类的下结论。DouyuFan重假使经过斗鱼网站弹幕音信之抓取,获取直播礼物的分布情形,历史数据记录及当前极看好房间信息。
接下去自己虽就此三蹩脚分别介绍自己以数额抓取、后台搭建和上下端数据通讯中学到之知识与遇的题材。

当今荣耀,你好

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website