• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

python爬取酷我音乐(收费也可)

python 搞java代码 3年前 (2022-05-21) 139次浏览 已收录 0个评论
文章目录[隐藏]

第一次创作,请多指教

环境:Python3.8,开发工具:Pycharm

第三方库:requests

详细

进入酷我音乐的网站到搜索界面

输入歌名进去打开开发者工具会发现这个包

它里面包含了这一页的音乐数据,我们需要的是这个参数

然后开始写代码吧,先找到所需的音乐数据

<code class="prism language-python has-numbering"><span class="token keyword"><a href="https://www.gaodaima.com/tag/import" title="查看更多关于import的文章" target="_blank">import</a> requests
<span class="token keyword">import json
<span class="token keyword">import os

<span class="token keyword">def <span class="token function">music_download<span class="token punctuation">(<span class="token punctuation">)<span class="token punctuation">:
    kw <span class="token operator">= <span class="token builtin">input<span class="token punctuation">(<span class="token string">"请输入音乐名称:"<span class="token punctuation">)
    <span class="token comment"># 请求头
    headers <span class="token operator">= <span class="token punctuation">{xian
        <span class="token string">"User-Agent"<span class="token punctuation">:<span class="token string">"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36 Edg/84.0.522.63"<span class="token punctuation">,
        <span class="token string">"Cookie"<span class="token punctuation">:<span class="token string">"_ga=GA1.2.1083049585.1590317697; _gid=GA1.2.2053211683.1598526974; _gat=1; Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1597491567,1598094297,1598096480,1598526974; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1598526974; kw_token=HYZQI4KPK3P"<span class="token punctuation">,
        <span class="token string">"Referer"<span class="token punctuation">: <span class="token string">"http://www.kuwo.cn/search/list?key=%E5%91%A8%E6%9D%B0%E4%BC%A6"<span class="token punctuation">,
        <span class="token string">"csrf"<span class="token punctuation">: <span class="token string">"HYZQI4KPK3P"<span class="token punctuation">,
    <span class="token punctuation">}
    <span class="token comment"># 参数列表
    params <span class="token operator">= <span class="token punctuation">{
        <span class="token string">"key"<span class="token punctuation">: kw<span class="token punctuation">,
        <span class="token comment"># 页数
        <span class="token string">"pn"<span class="token punctuation">: <span class="token string">"1"<span class="token punctuation">,
        <span class="token comment"># 音乐数
        <span class="token string">"rn"<span class="token punctuation">: <span class="token string">"10"<span class="token punctuation">,
        <span class="token string">"httpsStatus"<span class="token punctuation">: <span class="token string">"1"<span class="token punctuation">,
        <span class="token string">"reqId"<span class="token punctuation">: <span class="token string">"cc337fa0-e856-11ea-8e2d-ab61b365fb50"<span class="token punctuation">,
    <span class="token punctuation">}
    <span class="token comment"># 创建列表,后面下载需要
    music_list <span class="token operator">= <span class="token punctuation">[<span class="token punctuation">]
    url <span class="token operator">= <span class="token string">"http://www.kuwo.cn/api/www/search/searchMusicBykeyWord?"
    res <span class="token operator">= requests<span class="token punctuation">.get<span class="token punctuation">(url <span class="token operator">= url<span class="token punctuation">,headers <span class="token operator">= headers<span class="token punctuation">,params <span class="token operator">= params<span class="token punctuation">)
    res<span class="token punctuation">.encoding <span class="token operator">= <span class="token string">"utf-8"
    text <span class="token operator">= res<span class="token punctuation">.text
    <span class="token comment"># 转成json数据
    json_list <span class="token operator">= json<span class="token punctuation">.loads<span class="token punctuation">(text<span class="token punctuation">)
    <span class="token comment"># 发现data中list是存主要数据的地方
    datapack <span class="token operator">= json_list<span class="token punctuation">[<span class="token string">"data"<span class="token punctuation">]<span class="token punctuation">[<span class="token string">"list"<span class="token punctuation">]
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code>

www#gaodaima.com来源gao*daima.com搞@代#码网搞代码

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

接下来是重要的地方

先随便试听一首音乐,找到他的json数据

我们发现这个json数据里含有.mp3的链接,这就是音乐文件

复制他的url,进去看是一个接口

他的url有规律,之前我们提取的rid参数就起了作用,把它复制到链接里,这里看代码吧

<code class="prism language-python has-numbering"><span class="token comment"># 遍历拿到所需要的数据,音乐名称,歌手,id...
<span class="token keyword">for i <span class="token keyword">in datapack<span class="token punctuation">:
    <span class="token comment"># 音乐名
    music_name <span class="token operator">= i<span class="token punctuation">[<span class="token string">"name"<span class="token punctuation">]
    <span class="token comment"># 歌手
    music_singer <span class="token operator">= i<span class="token punctuation">[<span class="token string">"artist"<span class="token punctuation">]
    <span class="token comment"># 待会需要的id先拿到
    rid <span class="token operator">= i<span class="token punctuation">[<span class="token string">"rid"<span class="token punctuation">]
    <span class="token comment"># 随便试听拿到一个音乐的接口,这是的rid就用得上了
    api_music <span class="token operator">= <span class="token string">"http://www.kuwo.cn/url?format=mp3&rid={}&response=url&type=convert_url3" 
                <span class="token string">"&br=128kmp3&from=web&t=1598528574799&httpsStatus=1" 
                <span class="token string">"&reqId=72259df1-e85a-11ea-a367-b5a64c5660e5"<span class="token punctuation">.<span class="token builtin">format<span class="token punctuation">(rid<span class="token punctuation">)
    api_res <span class="token operator">= requests<span class="token punctuation">.get<span class="token punctuation">(url <span class="token operator">= api_music<span class="token punctuation">)
    <span class="token comment"># 打印发现真实的url确实在里面
    <span class="token comment"># print(api_res.text)
    music_url <span class="token operator">= json<span class="token punctuation">.loads<span class="token punctuation">(api_res<span class="token punctuation">.text<span class="token punctuation">)<span class="token punctuation">[<span class="token string">"url"<span class="token punctuation">]
    <span class="token comment"># 大功告成,试试效果
    <span class="token keyword">print<span class="token punctuation">(music_name<span class="token punctuation">)
    <span class="token keyword">print<span class="token punctuation">(music_singer<span class="token punctuation">)
    <span class="token keyword">print<span class="token punctuation">(music_url<span class="token punctuation">)
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

顺便写了个方便下载的功能

<code class="prism language-python has-numbering"> <span class="token comment"># 在此之前先创建列表
 music_list <span class="token operator">= <span class="token punctuation">[<span class="token punctuation">]
</span></span></span></span></code>
  • 1
  • 2
<code class="prism language-python has-numbering">函数体内建一个字典方便保存歌名与音乐数据
<span class="token comment"># 把数据存到字典方便下载时查找
music_dict <span class="token operator">= <span class="token punctuation">{<span class="token punctuation">}
music_dict<span class="token punctuation">[<span class="token string">"name"<span class="token punctuation">] <span class="token operator">= music_name
music_dict<span class="token punctuation">[<span class="token string">"url"<span class="token punctuation">] <span class="token operator">= music_url
music_dict<span class="token punctuation">[<span class="token string">"singer"<span class="token punctuation">] <span class="token operator">= music_singer
music_list<span class="token punctuation">.append<span class="token punctuation">(music_dict<span class="token punctuation">)
<span class="token comment"># 看看真实数据数量
<span class="token keyword">print<span class="token punctuation">(<span class="token builtin">len<span class="token punctuation">(music_list<span class="token punctuation">)<span class="token punctuation">)
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

遍历之前的列表数据进行判断,利用索引找到指定的url

<code class="prism language-python has-numbering"><span class="token comment"># 下载
xiazai <span class="token operator">= <span class="token builtin">input<span class="token punctuation">(<span class="token string">"输入要下载的音乐名称:"<span class="token punctuation">)
<span class="token comment"># 下载位置
root <span class="token operator">= <span class="token string">"E://下载的music//"
<span class="token comment"># 每个字典里有name和url
<span class="token keyword">for i <span class="token keyword">in <span class="token builtin">range<span class="token punctuation">(<span class="token builtin">len<span class="token punctuation">(music_list<span class="token punctuation">)<span class="token punctuation">)<span class="token punctuation">:
    <span class="token keyword">try<span class="token punctuation">:
        <span class="token keyword">if xiazai <span class="token operator">== music_list<span class="token punctuation">[i<span class="token punctuation">]<span class="token punctuation">[<span class="token string">"name"<span class="token punctuation">]<span class="token punctuation">:
            <span class="token comment"># 创建文件夹
            <span class="token keyword">if <span class="token operator">not os<span class="token punctuation">.path<span class="token punctuation">.exists<span class="token punctuation">(root<span class="token punctuation">)<span class="token punctuation">:
                os<span class="token punctuation">.mkdir<span class="token punctuation">(root<span class="token punctuation">)
            <span class="token comment"># 拿到字典中对应的音乐url数据
            music_content <span class="token operator">= requests<span class="token punctuation">.get<span class="token punctuation">(url <span class="token operator">= music_list<span class="token punctuation">[i<span class="token punctuation">]<span class="token punctuation">[<span class="token string">"url"<span class="token punctuation">]<span class="token punctuation">)<span class="token punctuation">.content
            <span class="token keyword">with <span class="token builtin">open<span class="token punctuation">(root <span class="token operator">+ <span class="token string">"{}.mp3"<span class="token punctuation">.<span class="token builtin">format<span class="token punctuation">(music_list<span class="token punctuation">[i<span class="token punctuation">]<span class="token punctuation">[<span class="token string">"name"<span class="token punctuation">]<span class="token punctuation">)<span class="token punctuation">,<span class="token string">"wb"<span class="token punctuation">) <span class="token keyword">as f<span class="token punctuation">:
                f<span class="token punctuation">.write<span class="token punctuation">(music_content<span class="token punctuation">)
                <span class="token keyword">print<span class="token punctuation">(<span class="token string">"下载成功"<span class="token punctuation">)
    <span class="token keyword">except<span class="token punctuation">:
        <span class="token keyword">print<span class="token punctuation">(<span class="token string">"下载失败"<span class="token punctuation">)
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

然后就可以愉快的下载付费音乐啦

完整代码

<code class="prism language-python has-numbering"><span class="token keyword">import requests
<span class="token keyword">import json
<span class="token keyword">import os

<span class="token keyword">def <span class="token function">music_download<span class="token punctuation">(<span class="token punctuation">)<span class="token punctuation">:
    kw <span class="token operator">= <span class="token builtin">input<span class="token punctuation">(<span class="token string">"请输入音乐名称:"<span class="token punctuation">)
    <span class="token comment"># 请求头
    headers <span class="token operator">= <span class="token punctuation">{
        <span class="token string">"User-Agent"<span class="token punctuation">:<span class="token string">"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36 Edg/84.0.522.63"<span class="token punctuation">,
        <span class="token string">"Cookie"<span class="token punctuation">:<span class="token string">"_ga=GA1.2.1083049585.1590317697; _gid=GA1.2.2053211683.1598526974; _gat=1; Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1597491567,1598094297,1598096480,1598526974; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1598526974; kw_token=HYZQI4KPK3P"<span class="token punctuation">,
        <span class="token string">"Referer"<span class="token punctuation">: <span class="token string">"http://www.kuwo.cn/search/list?key=%E5%91%A8%E6%9D%B0%E4%BC%A6"<span class="token punctuation">,
        <span class="token string">"csrf"<span class="token punctuation">: <span class="token string">"HYZQI4KPK3P"<span class="token punctuation">,
    <span class="token punctuation">}
    <span class="token comment"># 参数列表
    params <span class="token operator">= <span class="token punctuation">{
        <span class="token string">"key"<span class="token punctuation">: kw<span class="token punctuation">,
        <span class="token comment"># 页数
        <span class="token string">"pn"<span class="token punctuation">: <span class="token string">"1"<span class="token punctuation">,
        <span class="token comment"># 音乐数
        <span class="token string">"rn"<span class="token punctuation">: <span class="token string">"10"<span class="token punctuation">,
        <span class="token string">"httpsStatus"<span class="token punctuation">: <span class="token string">"1"<span class="token punctuation">,
        <span class="token string">"reqId"<span class="token punctuation">: <span class="token string">"cc337fa0-e856-11ea-8e2d-ab61b365fb50"<span class="token punctuation">,
    <span class="token punctuation">}
    <span class="token comment"># 创建列表,后面下载需要
    music_list <span class="token operator">= <span class="token punctuation">[<span class="token punctuation">]
    url <span class="token operator">= <span class="token string">"http://www.kuwo.cn/api/www/search/searchMusicBykeyWord?"
    res <span class="token operator">= requests<span class="token punctuation">.get<span class="token punctuation">(url <span class="token operator">= url<span class="token punctuation">,headers <span class="token operator">= headers<span class="token punctuation">,params <span class="token operator">= params<span class="token punctuation">)
    res<span class="token punctuation">.encoding <span class="token operator">= <span class="token string">"utf-8"
    text <span class="token operator">= res<span class="token punctuation">.text
    <span class="token comment"># 转成json数据
    json_list <span class="token operator">= json<span class="token punctuation">.loads<span class="token punctuation">(text<span class="token punctuation">)
    <span class="token comment"># 发现data中list是存主要数据的地方
    datapack <span class="token operator">= json_list<span class="token punctuation">[<span class="token string">"data"<span class="token punctuation">]<span class="token punctuation">[<span class="token string">"list"<span class="token punctuation">]
    <span class="token comment"># 遍历拿到所需要的数据,音乐名称,歌手,id...
    <span class="token keyword">for i <span class="token keyword">in datapack<span class="token punctuation">:
        <span class="token comment"># 音乐名
        music_name <span class="token operator">= i<span class="token punctuation">[<span class="token string">"name"<span class="token punctuation">]
        <span class="token comment"># 歌手
        music_singer <span class="token operator">= i<span class="token punctuation">[<span class="token string">"artist"<span class="token punctuation">]
        <span class="token comment"># 待会需要的id先拿到
        rid <span class="token operator">= i<span class="token punctuation">[<span class="token string">"rid"<span class="token punctuation">]
        <span class="token comment"># 随便试听拿到一个音乐的接口,这是的rid就用得上了
        api_music <span class="token operator">= <span class="token string">"http://www.kuwo.cn/url?format=mp3&rid={}&response=url&type=convert_url3" 
                    <span class="token string">"&br=128kmp3&from=web&t=1598528574799&httpsStatus=1" 
                    <span class="token string">"&reqId=72259df1-e85a-11ea-a367-b5a64c5660e5"<span class="token punctuation">.<span class="token builtin">format<span class="token punctuation">(rid<span class="token punctuation">)
        api_res <span class="token operator">= requests<span class="token punctuation">.get<span class="token punctuation">(url <span class="token operator">= api_music<span class="token punctuation">)
        <span class="token comment"># 打印发现真实的url确实在里面
        <span class="token comment"># print(api_res.text)
        music_url <span class="token operator">= json<span class="token punctuation">.loads<span class="token punctuation">(api_res<span class="token punctuation">.text<span class="token punctuation">)<span class="token punctuation">[<span class="token string">"url"<span class="token punctuation">]
        <span class="token comment"># 大功告成,试试效果
        <span class="token keyword">print<span class="token punctuation">(music_name<span class="token punctuation">)
        <span class="token keyword">print<span class="token punctuation">(music_singer<span class="token punctuation">)
        <span class="token keyword">print<span class="token punctuation">(music_url<span class="token punctuation">)
        <span class="token comment"># 把数据存到字典方便下载时查找
        music_dict <span class="token operator">= <span class="token punctuation">{<span class="token punctuation">}
        music_dict<span class="token punctuation">[<span class="token string">"name"<span class="token punctuation">] <span class="token operator">= music_name
        music_dict<span class="token punctuation">[<span class="token string">"url"<span class="token punctuation">] <span class="token operator">= music_url
        music_dict<span class="token punctuation">[<span class="token string">"singer"<span class="token punctuation">] <span class="token operator">= music_singer
        music_list<span class="token punctuation">.append<span class="token punctuation">(music_dict<span class="token punctuation">)
    <span class="token comment"># 看看真实数据数量
    <span class="token keyword">print<span class="token punctuation">(<span class="token builtin">len<span class="token punctuation">(music_list<span class="token punctuation">)<span class="token punctuation">)
    <span class="token comment"># 下载
    xiazai <span class="token operator">= <span class="token builtin">input<span class="token punctuation">(<span class="token string">"输入音乐名称:"<span class="token punctuation">)
    <span class="token comment"># 下载位置
    root <span class="token operator">= <span class="token string">"E://下载的music//"
    <span class="token keyword">for i <span class="token keyword">in <span class="token builtin">range<span class="token punctuation">(<span class="token builtin">len<span class="token punctuation">(music_list<span class="token punctuation">)<span class="token punctuation">)<span class="token punctuation">:
        <span class="token keyword">try<span class="token punctuation">:
            <span class="token keyword">if xiazai <span class="token operator">== music_list<span class="token punctuation">[i<span class="token punctuation">]<span class="token punctuation">[<span class="token string">"name"<span class="token punctuation">]<span class="token punctuation">:
                <span class="token comment"># 创建文件夹
                <span class="token keyword">if <span class="token operator">not os<span class="token punctuation">.path<span class="token punctuation">.exists<span class="token punctuation">(root<span class="token punctuation">)<span class="token punctuation">:
                    os<span class="token punctuation">.mkdir<span class="token punctuation">(root<span class="token punctuation">)
                <span class="token comment"># 拿到字典中对应的音乐url数据
                music_content <span class="token operator">= requests<span class="token punctuation">.get<span class="token punctuation">(url <span class="token operator">= music_list<span class="token punctuation">[i<span class="token punctuation">]<span class="token punctuation">[<span class="token string">"url"<span class="token punctuation">]<span class="token punctuation">)<span class="token punctuation">.content
                <span class="token keyword">with <span class="token builtin">open<span class="token punctuation">(root <span class="token operator">+ <span class="token string">"{}({}).mp3"<span class="token punctuation">.<span class="token builtin">format<span class="token punctuation">(music_list<span class="token punctuation">[i<span class="token punctuation">]<span class="token punctuation">[<span class="token string">"name"<span class="token punctuation">]<span class="token punctuation">,music_list<span class="token punctuation">[i<span class="token punctuation">]<span class="token punctuation">[<span class="token string">"singer"<span class="token punctuation">]<span class="token punctuation">)<span class="token punctuation">,<span class="token string">"wb"<span class="token punctuation">) </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code>

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:python爬取酷我音乐(收费也可)

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址