zoukankan      html  css  js  c++  java
  • python音乐下载,小白也可以写爬虫

    **
    简介:使用BeautifulSoup和request模块进行抓取和解析,
    最后保存音乐(注:音乐质量是普通品质的)
    **
    关于模块的安装,打开cmd输入

    pip install bs4 //安装BeautifulSoup
    pip install requests //安装requests
    pip install fake_useragent //这个模块可以随机生成一个headers

    (不能安装请升级pip或者以管理员模式打开cmd)

    我们这里爬取的是网易云音乐

    https://music.163.com/artist?id=4292 //爬取的链接
    http://music.163.com/song/media/outer/url?id= //音乐播放外链链接

    首先:我们先进行网页源码获取

    https://music.163.com/#/artist?id=4292

    https://weibo.com/6056761580/IAhNGivsJ
    最开始我们是直接来用这个链接来请求网页的,但是我们会发现返回的href元素是空的(#)。这个链接并不是真正的歌单链接。

    https://weibo.com/6056761580/IAhNGivsJ?type=comment
    但经寻找会发现source中有个不一样的网页链接

    接下来我们会找到这个链接https://music.163.com/song?id=1407551413,看一眼是不是不太一样。和原链接就一个‘/#’之差,内容就不一样,这是网易云隐藏了源网页。
    然后仔细查看就可以找到音乐id和名称

    接下来就是代码实现了

    import requests
    from fake_useragent import UserAgent
    from bs4 import BeautifulSoup
    import time
    import os

    def createFile(file_path):
    if os.path.exists(file_path) is False:
    os.makedirs(file_path)
    # 切换路径至上面创建的文件夹
    os.chdir(file_path)

    def get_html():
    url = 'https://music.163.com/artist?id=4292'
    headers = {
    'User-Agent': UserAgent().random #随机一个模仿浏览器请求头
    }
    response = requests.get(url, headers=headers)
    res = BeautifulSoup(response.text, 'lxml')
    id_lists = res.find(class_='f-hide').find_all('a')
    return id_lists

    def download(names,hrefs):
    #获取音乐id后还要进行解析并保存
    headers = {
    'User-Agent': UserAgent().random
    }
    #这里还要再加个headers,不然会假数据
    url = 'http://music.163.com/song/media/outer/url?id='
    #网易云外链地址,通过这个可以免费下载
    response = requests.get(url+hrefs,headers=headers).content
    #返回二进制
    f = open('D:\music\{}.mp3'.format(names),'wb') #这里下载的歌曲储存到E盘music文件夹
    f.write(response)
    print('正在下载{}'.format(names))

    if __name__ == '__main__':
    createFile('D:music')
    get_html()
    for id_url in get_html():
    names = id_url.text
    hrefs = id_url['href'][9:]
    #用变量来接收歌曲名和id
    download(names,hrefs)
    time.sleep(1) #睡眠一秒,防止过于频繁访问


    如果你想下载其他歌曲可以把url中的链接换掉,注意把‘/#’删除以获取真正的链接。这个代码适用于歌单和专辑下载

    最后谢谢大家看完,本人小白一个。今年大一自学了3个月python。第 一次发博客,如有不好之处,望指出。

  • 相关阅读:
    单例模式
    collections额外数据类型
    logging的简单使用
    杂记
    字符编码
    面向对象编程简介
    logging模块
    re与subprocess模块
    oepnpyxl模块 与excle交互
    json序列化模块
  • 原文地址:https://www.cnblogs.com/yuqiao668/p/12570850.html
Copyright © 2011-2022 走看看