吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4003|回复: 29
收起左侧

[Python 转载] 【python爬虫】分析Ajax爬取音乐接口解析网站

[复制链接]
ai酸的博文 发表于 2019-12-4 12:47
本帖最后由 ai酸的博文 于 2019-12-4 12:54 编辑

本文仅限学习交流!

一、思路分享


1、找到该音乐接口解析网站Ajax请求接口
2、发送post请求,获取title、author、url下载链接
3、下载自己想要的音乐
4、自动弹窗打开本地默认播放器播放

二、源码

[Python] 纯文本查看 复制代码
import requests,json,os,subprocess


# 发post请求,获取5条内容(title、author、下载url)
def getContent(music_name,type):
    print('正在获取'+type+'资源...')
    url = 'http://music.ifkdy.com/'
    data = {'input': music_name,
            'filter': 'name',#kuwo   netease
            'type': type,
            'page': '1'}
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36',
        'X-Requested-With': 'XMLHttpRequest'#这个必须带 否则出错
    }
    try:
        response = requests.post(url,headers=headers,data=data)
        Html_dict = json.loads(response.content.decode())
        music1= Html_dict['data'][0]
        music2 = Html_dict['data'][1]
        music3 = Html_dict['data'][2]
        music4 = Html_dict['data'][3]
        music5 = Html_dict['data'][4]
        print(type+'资源获取成功')
        return music1, music2, music3, music4, music5
    except:
        print(type+'资源获取失败')
        return []

#选择是否下载?下载哪一个?
def select(musicTuple):
    if musicTuple==[]:
        return 0
    print('-------------------音乐目录-------------------\n0、不下载')
    num = 1
    for music in musicTuple:
        print(str(num) + '、' + music['title'] + ' ' + music['author'])
        num += 1
    choice = input('请输入数字序号:')
    if choice==0:
        return 0
    else:
        return musicTuple[int(choice)-1]

#开始下载
def download(music):
    if music==0:
        return 0
    else:
        print('-------------------开始下载-------------------')
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'}
        try:
            data = requests.get(music['url'], headers=headers, stream=True)
            if (not (os.path.exists('e://音乐spider'))):
                os.mkdir('e://音乐spider')
            with open('E://音乐spider//{}.mp3'.format(music['title'] + ' ' + music['author']), 'wb')as f:
                for j in data.iter_content(chunk_size=512):
                    f.write(j)
                print('下载成功:' + music['title'] + ' ' + music['author'])
            path = 'e://音乐spider//{}.mp3'.format(music['title'] + ' ' + music['author'])
            return path
        except:
            print('下载失败:'+music['title'] + ' ' + music['author'])

def run():
    music_name = input('请输入音乐名称或音乐人姓名:')
    #发post请求,获取5条内容(title、author、下载url)
    musicTuple = getContent(music_name,'netease')
    #选择是否下载?true-->下载哪一个?true--->return music  false--->return
    music = select(musicTuple)
    #开始下载
    path = download(music)
    #音乐播放
    subprocess.Popen(path,shell=True)

if __name__ == '__main__':
    run()


三、运行结果图片

QQ截图20191204123912.png

学.png


欢迎大家交流,喜欢的点个赞呀~

免费评分

参与人数 6吾爱币 +6 热心值 +5 收起 理由
Dreamll + 1 + 1 我很赞同!
nan_hao + 1 + 1 我很赞同!
sanityko + 1 + 1 这么多def,不太会用,我会直接码砖块
pwohenpiq + 1 + 1 谢谢@Thanks!
wnzczh4987 + 1 + 1 我很赞同!
Perry + 1 这个抓取是开源的。。。。为何还要嵌套在抓取一次

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| ai酸的博文 发表于 2019-12-4 13:14
ds3700 发表于 2019-12-4 13:04
厉害 厉害 你运行python 的软件 是哪个啊!?

pycharm社区版
 楼主| ai酸的博文 发表于 2019-12-4 13:15
逍遥游0222 发表于 2019-12-4 13:10
三个函数 是因为这样子调用方便吗??
import 导入的类是哪里的呢  
我也是刚开始学python

你可以一个个写,也可以用逗号连接起来~
导入的有的的python自带的,有的是需要下载的。例如pip install requests
ds3700 发表于 2019-12-4 13:04
咸某鱼 发表于 2019-12-4 13:09
太强了大佬
逍遥游0222 发表于 2019-12-4 13:10
三个函数 是因为这样子调用方便吗??
import 导入的类是哪里的呢  
我也是刚开始学python
 楼主| ai酸的博文 发表于 2019-12-4 13:16

没有没有,其实这些都是很基础的。学几天就会了
我傻瓜1991 发表于 2019-12-4 13:21
学习一下啊
lxyok 发表于 2019-12-4 13:33
老哥试试,咪咕音乐,我最近在搞这个
嘚瑟挨顿揍 发表于 2019-12-4 13:56
666啊
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 16:39

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表