python爬虫-网易云音乐

import requests
# from beautifulSoup import BeautifulSoup
from bs4 import BeautifulSoup
from urllib import request
import requests
import re
from bs4 import BeautifulSoup
from pprint import pprint
import urllib, time


def get_content(url):
    headers = {
        'Host': 'music.163.com',
        'Referer': 'https://music.163.com/',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'
    }
    r = requests.session()
    r = BeautifulSoup(r.get(url, headers=headers).content, "html.parser")
    return r

# 保存
def save(r):
    music_dict = {}
    result = r.find('ul', {'class': 'f-hide'}).find_all('a')
    # print(result)
    for music in result:
        music_dict[music['href'].strip("/song?id=")] = music.text
        # for k, v in src_dict.items():
        # print(k, v)
    return music_dict

# 下载音乐如:http://music.163.com/song/media/outer/url?id=534544522.mp3


def download_song(song_id, music_dict):
    try:
        song_url = 'http://music.163.com/song/media/outer/url?id=%s.mp3' % song_id  # 该链接为浏览器在网页版缓存歌曲的下载链接
        music_n = re.sub('\\.*?(\W)', '', music_dict[song_id]) # 去掉歌名括号
        urllib.request.urlretrieve(song_url, 'D:\\spider\\%s.mp3' % music_n)
        time.sleep(0.9)
    
        print("{}下载完成!".format(music_dict[song_id]))
    except KeyError:
        print("请确认歌曲id是否正确或者歌曲是否收费。")

# 歌名 ID 写入文件
def write(music_dict):
    fp = open('music1.txt', 'a',errors='ignore')
    for k, v in music_dict.items():
        fp.write(music_dict[k] + "\r\n" + "id:" + k + "\r\n")
    fp.close()

# 启动
if __name__ == '__main__':
    # url = 'https://music.163.com/playlist?id=2252736518'
    url = 'https://music.163.com/playlist?id=2153548870'
    for i in range(10):
        r = get_content(url)
        music_dict = save(r)
        pprint(music_dict)
        write(music_dict)
        print("---------------------")
        while True:
      
            for song_id,music_name in music_dict.items():
         
                print("正在搜索{}并下载.".format(music_name))
        
                download_song(song_id, music_dict)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值