美文网首页爬虫机器学习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客户端(请大家不要问我为什么情人节这一天为什么闲着没事更新代码)

如果你喜欢,点下喜欢吧

相关文章

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

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

  • 如何发布一个Python命令行工具

    本文简介 上次写的一个终端里面斗鱼TV弹幕Python版本和Ruby版本,并且发布到PIP和RubyGems上面....

  • Python程序员如何优雅的看斗鱼TV

    过年的一段时间抽空研究写了一些关于斗鱼TV的弹幕的获取.分别使用Python和Ruby写了弹幕获取的客户端. 文章...

  • 斗鱼

    斗鱼tv是一家弹幕式直播分享网站,为用户提供视频直播和赛事直播服务。斗鱼tv的前身为AXFUN生放送直播,...

  • 记一次斗鱼TV弹幕爬虫经历(Ruby版本)

    斗鱼弹幕助手 0.前言 前几天(寒假前咯)闲着无聊,看到舍友们都在看斗鱼TV,虽然我对那些网络游戏都不是非常感兴趣...

  • 【Python3爬虫】斗鱼弹幕爬虫

    在网上找到了一份斗鱼弹幕服务器第三方接入协议v1.6.2,有了第三方接口,做起来就容易多了。 学习Python中有...

  • 听斗鱼CEO谈创业经历

    斗鱼TV是一家弹幕式直播分享网站,为用户提供视频直播和赛事直播服务。斗鱼TV的前身为ACFUN生放送直播,于201...

  • 先睹为快:斗鱼TV上市路演PPT曝光了

    斗鱼TV是一家弹幕式直播分享网站,为用户提供视频直播和赛事直播服务。斗鱼TV的前身为ACFUN生放送直播,于201...

  • Python爬虫实战,requests模块,Python实现抓取

    前言 利用Python实现抓取芒果TV弹幕,废话不多说。 让我们愉快地开始吧~ 开发工具 Python版本: 3....

  • 爬虫类

    selenium,splinter,webbrowser浏览器操作 scrapy爬虫 关于爬取斗鱼弹幕http:/...

网友评论

  • 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的接口就被封掉了,所以没有跟进修复
  • 5a012d058297: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