Python结合爬虫与Django构建网易云音乐API接口

季宁
季宁
发布时间:2026-10-14 | 5人浏览过
原创

本文介绍如何利用Python爬虫技术抓取网易云音乐榜单数据,并通过Django框架封装为RESTful API接口。通过解析HTML获取歌曲名称与URL,存入MySQL数据库,最终提供简单的数据查询接口,适用于微信小程序等场景的测试需求。

简述

近期同事在开发微信小程序时,需要测试音乐播放接口。由于直接使用网易云官方开放接口流程较为繁琐且难以进行本地测试,因此提出需求。为此,我们使用Python编写了一个简易的网易云歌曲URL爬虫,将获取的数据存储至MySQL数据库,并利用Django框架封装成简易API接口,供同事进行内部测试使用。

原理

首先创建Django项目并完成基础配置。在views模块中定义两个核心方法:一个用于从MySQL数据库中检索数据并封装为API响应;另一个为爬虫逻辑,负责抓取数据后通过Django ORM将数据插入MySQL数据库。路由配置对应两个端点:一个是触发爬虫运行的路由,另一个是提供数据查询的API接口路由。在Model层中,为简化结构,仅设置两个字段:歌曲名称和对应的URL地址。

代码如下

views文件代码


from django.shortcuts import render,HttpResponse
import requests
from lxml import etree
from .models import Api
# Create your views here.
def api_wy(request):
  api = Api.objects.all()
  return render(request, "index.html",locals())

def pc(request):
  url = 'https://music.163.com/discover/toplist?id=3779629'
  headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3861.400 QQBrowser/10.7.4313.400'
  }
  data = requests.get(url=url, headers=headers)
  html = etree.HTML(data.text)
  music_list = html.xpath('//ul[@class="f-hide"]/li/a')

  music_lis = [] # 存放歌曲信息
  for music in music_list:
    music_name = music.xpath('./text()')[0] # 获取歌曲名称
    music_id_all = music.xpath('./@href')[0] # 获取a标签内容
    music_id = music_id_all.split('=')[-1] # 将a标签内容进行数据清洗,提取歌曲的id
    download_music = music_name + ' ' + f'http://music.163.com/song/media/outer/url?id={music_id}.mp3' # 将歌曲名称和url进行拼接
    music_lis.append(download_music)
    print(download_music)

  for url in music_lis:
    try:
      url_name = url.split(' ')[0] # 获取名称
      url_music = url.split(' ')[1] # 获取url
      Api.objects.create(name=url_name,url=url_music)
      print("正在插入数据")
    except:
      print("charushibai")
  return HttpResponse("正在下载")

URL路由文件


from django.contrib import admin
from django.urls import path
from api.views import api_wy,pc

urlpatterns = [
  path('admin/', admin.site.urls),
  path('api/',api_wy),
  path("pc/",pc),
]

Models层面


from django.db import models

# Create your models here.
class Api(models.Model):
  name = models.CharField('歌曲名称', max_length=100)
  url = models.CharField("歌曲地址",max_length=300)

  class Meta:
    verbose_name = '歌曲API'
    verbose_name_plural = verbose_name

  def __str__(self):
    return self.name

其余部分无特殊说明,这只是一个简单的测试需求,旨在简化操作流程。至此,项目介绍完毕。

以上就是python基于爬虫+django,打造个性化API接口的详细内容,更多关于python api接口的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表