美文网首页爬虫机器学习Python
斗鱼TV弹幕爬虫(Python版本)

斗鱼TV弹幕爬虫(Python版本)

作者: 无与童比 | 来源:发表于2016-02-14 13:20 被阅读10808次

    前几天用Ruby写了一个斗鱼TV弹幕的小爬虫,因为接下来的大四下学期需要去上海找工作,于是赶紧拿出Python来复习复习,把Ruby版本的代码使用Python重写一遍.

    怎么用?

    在安装好python3版本之后使用

    pip3 install danmu.fm
    
    # 比如主播的直播间
    danmu.fm http://www.douyutv.com/16789
    #或者
    danmu.fm 16789
    

    使用效果如下

    test.gif test1.gif

    Python版本代码

    https://github.com/twocucao/danmu.fm

    原理

    http://www.jianshu.com/p/ef0225b6bb0e

    最新更新时间

    • **Update 20160609 : ** 更新Python客户端,修复由于斗鱼网页版面修改带来的小问题,直接开启海量弹幕模式(请大家不要问我为什么端午节这一天为什么闲着没事更新代码,这个真的和情人节是同一个原因).
    • **Update 20160220 : **更新Python客户端,增加直播视频的Live获取,以及Mac平台下面的Mplayer的视频播放.代码均放在Github上面. GitHub - twocucao/danmu.fm: douyutv danmu 斗鱼TV 弹幕助手**
    • **Update 20160214 : 更新Python和Ruby客户端(请大家不要问我为什么情人节这一天为什么闲着没事更新代码)

    如果你喜欢,点下喜欢吧

    相关文章

      网友评论

      • 9e5946ae624e:你好~谢谢你的代码~但在mac上跑代码的时候总是显示operation timeout……我也不清楚哪里出错了,请问能解答一下吗QAQ

        [15:04:20] INFO::danmu - 正在检查环境
        [15:04:20] INFO::danmu - 程序正在启动,检查环境配置
        [15:04:20] INFO::danmu - 开始配置环境
        [15:04:20] INFO::danmu - 环境检查完毕,正在开启斗鱼客户端(请等待15s~30s)
        Traceback (most recent call last):
        File "/usr/local/bin/danmu.fm", line 11, in <module>
        sys.exit(main())
        File "/usr/local/lib/python3.6/site-packages/danmufm/danmu.py", line 117, in main
        parse_command()
        File "/usr/local/lib/python3.6/site-packages/click/core.py", line 722, in __call__
        return self.main(*args, **kwargs)
        File "/usr/local/lib/python3.6/site-packages/click/core.py", line 697, in main
        rv = self.invoke(ctx)
        File "/usr/local/lib/python3.6/site-packages/click/core.py", line 895, in invoke
        return ctx.invoke(self.callback, **ctx.params)
        File "/usr/local/lib/python3.6/site-packages/click/core.py", line 535, in invoke
        return callback(*args, **kwargs)
        File "/usr/local/lib/python3.6/site-packages/danmufm/danmu.py", line 107, in parse_command
        start_douyu_client()
        File "/usr/local/lib/python3.6/site-packages/danmufm/danmu.py", line 112, in start_douyu_client
        DouyuClient(url).start()
        File "/usr/local/lib/python3.6/site-packages/danmufm/client/douyu_client.py", line 66, in start
        self.fetch_danmu(auth_server_ip, auth_server_port)
        File "/usr/local/lib/python3.6/site-packages/danmufm/client/douyu_client.py", line 162, in fetch_danmu
        client.start()
        File "/usr/local/lib/python3.6/site-packages/danmufm/client/douyu_danmu_manager.py", line 36, in start
        self.do_login()
        File "/usr/local/lib/python3.6/site-packages/danmufm/client/douyu_danmu_manager.py", line 71, in do_login
        self.danmu_socket.connect(self.DANMU_ADDR)
        TimeoutError: [Errno 60] Operation timed out
        9e5946ae624e:试了好多次……有两次是突然可以了……可是再试多几次就不可以了QAQ
      • f056ddcc4f40:想弱弱的问一下在哪里运行,python里面还是cmd?为何显示invalid syntax
        无与童比:@槲寄生_3eea 你好,windows上面建议在pycharm的终端运行.

        1. python3 环境
        2. 安装对应依赖库
        3. windows里可以考虑在pycharm的终端里执行命令.
      • 你若安好管我鸟事:我想问下 视频rtmp的直播流在代码中 哪个地方写的有方法?
        无与童比:@你若安好管我鸟事 你好,程序写出来没多久,这个rtmp的接口就被封掉了,所以没有跟进修复
      • 阿部良:Traceback (most recent call last):
        File "f:\python\lib\runpy.py", line 195, in _run_module_as_main
        "__main__", mod_spec)
        File "f:\python\lib\runpy.py", line 87, in _run_code
        exec(code, run_globals)
        File "F:\Python\Scripts\danmu.fm.exe\__main__.py", line 5, in <module>
        File "f:\python\lib\site-packages\danmufm\danmu.py", line 18, in <module>
        from .settings import ROOT_PROJECT_DIR
        File "f:\python\lib\site-packages\danmufm\settings.py", line 49, in <module>
        code = compile(f.read(), CONFIG_FILE, 'exec')
        UnicodeDecodeError: 'gbk' codec can't decode byte 0xaa in position 16: illegal m
        ultibyte sequence

        怎么回事,亲
        无与童比:@张云路 Hi , 1. 在PyCharm 中运行 2. 修改源码. 兼容windows
        yunlux:@无与童比 如何才能支持Windows?
        无与童比: @阿部良 你好,程序不支持windows。
      • e37360145d0b:你好,首先谢谢你的代码。当我在跑你的代码的时候总是报一下的错,不知道是哪里出了问题呢


        [23:17:23] INFO::danmu - 正在检查环境
        [23:17:23] INFO::danmu - 程序正在启动,检查环境配置
        [23:17:23] INFO::danmu - 开始配置环境
        [23:17:23] INFO::danmu - 环境检查完毕,正在开启斗鱼客户端(请等待15s~30s)
        Traceback (most recent call last):
        File "/usr/local/bin/danmu.fm", line 11, in <module>
        sys.exit(main())
        File "/usr/local/lib/python3.6/site-packages/danmufm/danmu.py", line 117, in main
        parse_command()
        File "/usr/local/lib/python3.6/site-packages/click/core.py", line 722, in __call__
        return self.main(*args, **kwargs)
        File "/usr/local/lib/python3.6/site-packages/click/core.py", line 697, in main
        rv = self.invoke(ctx)
        File "/usr/local/lib/python3.6/site-packages/click/core.py", line 895, in invoke
        return ctx.invoke(self.callback, **ctx.params)
        File "/usr/local/lib/python3.6/site-packages/click/core.py", line 535, in invoke
        return callback(*args, **kwargs)
        File "/usr/local/lib/python3.6/site-packages/danmufm/danmu.py", line 107, in parse_command
        start_douyu_client()
        File "/usr/local/lib/python3.6/site-packages/danmufm/danmu.py", line 112, in start_douyu_client
        DouyuClient(url).start()
        File "/usr/local/lib/python3.6/site-packages/danmufm/client/douyu_client.py", line 51, in start
        auth_server_ip, auth_server_port = self.fetch_room_info(self.url)
        File "/usr/local/lib/python3.6/site-packages/danmufm/client/douyu_client.py", line 75, in fetch_room_info
        room["gg_show"] = js["room_gg"]["show"]
        KeyError: 'room_gg'
        无与童比:@潔西卡名字不要太長了了了了了 你好,去年的斗鱼的网页结构变化太快,你顺着我的文章的思路看一下应该是解析某个json数据出错了. 具体函数在fetch_room_info上面
      • aefaa56994f4:在运行了一段时间后会提示如下错误信息,并进入CPU高占用状态,不知是不是斗鱼改了什么东西。
        Exception in thread Thread-1:
        Traceback (most recent call last):
        File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/threading.py", line 914, in _bootstrap_inner
        self.run()
        File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/threading.py", line 862, in run
        self._target(*self._args, **self._kwargs)
        File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/danmufm/client/douyu_danmu_manager.py", line 63, in keeplive
        self.send_auth_keeplive_msg()
        File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/danmufm/client/douyu_danmu_manager.py", line 178, in send_auth_keeplive_msg
        self.danmu_auth_socket.sendall(msg)
        BrokenPipeError: [Errno 32] Broken pipe
      • 6e706aa1aa6b:楼主,你好!我现在想在网站中获取斗鱼在网站上播放,想让不同页面添加 不同的调用视频,怎么做啊?我是菜鸟,希望指点。
      • 74a295da2aa6:ubuntukylin-16.04-desktop-i386
        root@cz-virtual-machine:/home/cz# danmu.fm 426088
        Traceback (most recent call last):
        File "/usr/local/bin/danmu.fm", line 7, in <module>
        from danmufm.danmu import main
        File "/usr/local/lib/python3.5/dist-packages/danmufm/danmu.py", line 73, in <module>
        import click
        ImportError: No module named 'click'
        什么原因?
        无与童比:@74a295da2aa6 pip install click
      • 3d6399d98429:终于成功跑起来了,谢谢!!请问具体是哪一部分代码实现了异步的功能呢?
        无与童比:@Markery_Move 我上面写的是"异步,但是改用多线程进行编写了",因为之前使用Twisted尝试了一番,但是对twisted不是很熟悉,导致我后期扩展功能的时候比较困难,所以暂时使用多线程代替了.
        3d6399d98429:@无与童比 哦,我是看你github下面的TO DO 以为你哪里用了。。。。误解了
        无与童比:@Markery_Move 没哟用异步呀,我用的是多线程.
      • 3d6399d98429:不知道为什么我再ubuntu安装后显示 danmu.fm command not found :disappointed_relieved:
        3d6399d98429:额,不知道为什么,直接找到那个danmu.py的文件然后 python danmu.py 房间号
        结果里面的相互引用的文件地址就乱了
        无与童比:@Markery_Move 虽然程序已经废弃,但是命令不应该找不到呀
        无与童比:@Markery_Move 额,这个我就不清楚了,我这边命令是正常的.(虽然斗鱼API接口已经更换了)
      • SteelZheng:不错学习了,我最近也做了一个爬取妹子图片的爬虫 <a href="http://www.jianshu.com/p/984315f63982&quot; rel="nofollow" target="_blank">http://www.jianshu.com/p/984315f63982&lt;/a>
      • 无与童比:这个问题是在什么时候出现的?


      • 8cdc9e6f30a4:专门注个帐号来提个问题 在Mac环境下使用 总是报AttributeError: 'NoneType' object has no attribute 'group'的错误不知道为啥 不知道是不是个例。。。
        无与童比:@疲倦的老long 可能吧,长时间没有维护这个项目.没有注意到
        8cdc9e6f30a4:@无与童比 我昨天第一次用 就有了 我看有人说最近斗鱼又改了请求格式 不知道是不是因为这个。。。
        无与童比:@疲倦的老long 这个问题是在什么时候出现的?
      • 好吃不过老干妈:请问弹幕的时间是从服务器返回的消息里获取的还是打印屏幕的当前时刻?我看返回的消息里没有时间戳这个字段

        还有一个我发现接受的消息有些是带好几条弹幕的,会有好几个'type@='关键字,这个不知道博主处理了没?
      • 36e37325f602:从知乎跑过来的,有两个问题想问一下。一个就是第二个消息发送的特别慢,大概要4,5分钟。还有就是我借来朋友的Mac也跑了一下,显示什么Connection destruct by peer,很奇怪。我想把这个改造一下,通过判断弹幕的内容及其数量(666666之类的),去然后再截取这一时刻的前后五分钟,保存下来。这样就可以贡献给逗鱼时刻了。不过苦于没有Mac(QAQ,等个mbp2016快等死了),唉……
        无与童比:@IvyWingG 我试了一下,我这边是正常的。
        无与童比:@IvyWingG 这个需求并不是很难的。第二个消息发送超时差不多是因为消息超时了。可能服务器那边不是很稳定。
        无与童比:@IvyWingG 我这几天找工作,没时间调试哎,过段时间吧。

      本文标题:斗鱼TV弹幕爬虫(Python版本)

      本文链接:https://www.haomeiwen.com/subject/tazukttx.html