V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
dbow
V2EX  ›  Python

分享一个百度音乐下载器以及一个很好的 http 库

  •  
  •   dbow ·
    maliubiao · 2014-10-14 20:56:17 +08:00 · 1964 次点击
    这是一个创建于 3473 天前的主题,其中的信息可能已经有所发展或是发生改变。
    项目地址
    https://github.com/maliubiao/simple_htttp

    其中baidu_music.py的用法
    python baidu_music.py -a 歌手id 就可以自动下载其所有的歌
    python baidu_music.py -i 歌曲id 就可以下载单首歌

    歌手id从http://music.baidu.com/artist/7898取得
    歌曲id从http://music.baidu.com/song/14945107取得

    这个是为了测试自写的http库而写的,下了几个G的歌,用着确实很好,分享给各位

    这个项目里还有一些好玩的东西
    simple_http.py 是http库, 我个人非常讨厌标准库里的urllib2, requests代码又乱效率又低, 不喜欢。
    这个库支持http代理,socks5代理, 以及全部的http方法, 代码量少, 效率高。
    post文件也很简单,
    比如simple_http.post("http://url.com", payload{"file": open("test", "r")})

    encrypted.client.py encrypted.server.py是socks5转发代理
    这个是epoll异步非阻塞模型+随机密码表, 在linux上工作的极好,翻墙用的,在我的笔记本上使用CPU占用从来不过0.3%。

    pretty.py是html formatter, 把乱七八糟,经过混淆的html整理干净

    etree_utils.py是为了快速定位静态html文件里的XPATH写的, 做爬虫时非常好用

    http_request_simulator.py 是用多进程模型模拟浏览器并发取网页用的,主要测试网页的整体响应, 以及服务的正确性。

    这些工具是我写爬虫时用的,我个人是etree_util.py 定位XPATH, simple_http下载, lxml提取, 比Beautifulsoup之流好太多。

    欢迎star, 欢迎反馈, 不懂的地方给我留言,我给你解释。
    我的微博 weibo.com/maliubiao
    13 条回复    2014-10-21 15:45:39 +08:00
    paloalto
        1
    paloalto  
       2014-10-14 21:16:06 +08:00 via Android
    404
    dbow
        2
    dbow  
    OP
       2014-10-14 21:23:06 +08:00
    irrienberith
        3
    irrienberith  
       2014-10-14 21:29:38 +08:00
    第一个star
    fange01
        4
    fange01  
       2014-10-14 21:30:19 +08:00
    先关注,常交流。
    phuslu
        5
    phuslu  
       2014-10-14 21:31:22 +08:00
    回个可能打击楼主的贴, 楼主的代码带有强烈 c/perl 的风格,不是主流的 python lib 的写法。
    phuslu
        6
    phuslu  
       2014-10-14 21:41:52 +08:00
    比如 send_http 这个方法,主流的做法是返回一个 multi-value dict 的 message 和 readable 的 fileobject, 而且一般会把它们打包成一个 response 对象里面。

    楼主你直接暴力 return header, body 局限性太大。
    jy02201949
        7
    jy02201949  
       2014-10-14 21:48:29 +08:00
    下下来是什么码率的歌啊?
    dbow
        8
    dbow  
    OP
       2014-10-14 21:50:06 +08:00
    @jy02201949 我没有会员, 网页播放器里普通的那种, 4M大小的mp3。
    dbow
        9
    dbow  
    OP
       2014-10-14 21:53:32 +08:00
    @phuslu 强调的是准确,简单,高效,没有骨质增生。
    reter
        10
    reter  
       2014-10-14 22:05:45 +08:00 via Android
    我做过类似的,不过是油猴脚本,原理是收藏歌曲,然后通过yinyueyun.baidu.com(对不对?)获取下载链接,可以获取到无损和320
    dbow
        11
    dbow  
    OP
       2014-10-14 22:09:43 +08:00
    @phuslu 压力山大,return header, body除了直接暴力, 其它局限性麻烦指导一下, 谢谢。
    dbow
        12
    dbow  
    OP
       2014-10-14 22:21:37 +08:00
    @reter 欢迎试试我这个,我这一会儿又自动下了几百首。
    xiaomayi0323
        13
    xiaomayi0323  
       2014-10-21 15:45:39 +08:00
    @phuslu Goagent作者?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5367 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 09:02 · PVG 17:02 · LAX 02:02 · JFK 05:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.