python基于爬虫+django,打造个性化API接口
作者:mushroom27 发布时间:2021-06-22 01:06:19
标签:python,爬虫,api接口,django
简述
今天也是同事在做微信小程序的开发,需要音乐接口的测试,可是用网易云的开放接口比较麻烦,也不能进行测试,这里也是和我说了一下,所以就用爬虫写了个简单网易云歌曲URL的爬虫,把数据存入mysql数据库,再利用django封装装了一个简单的API接口,给同事测试使用。
原理
创建django项目,做好基础的配置,在views里写两个方法,一个是从mysql数据库中查数据然后封装成API,一个是爬虫方法,数据扒下来以后,通过django的ORM把数据插入到mysql数据库中。
这里的路由也是对应两个,一个是爬虫的请求路由(就是运行路由),一个是接口路由,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
其他的也就没什么可说的了,也是一个比较简单的测试需求,就是为了省点事情才弄得
好了,今天就到这了,拜拜
来源:https://www.cnblogs.com/mushroom7/p/14307426.html


猜你喜欢
- 网页路径问题可以说是在页面设计或程序中比较典型的问题,处理得不好会给你的带来很大的麻烦,如何才能彻底解决路径问题呢!asp之家为你特别准备了
- 有时候想要把几张图放在一起plot,比较好对比,subplot和subplots都可以实现,具体对比可以查看参考博文。这里用matplotl
- PhotoSwipe插件能实现手机端点击图片全屏放大 再双击图片放大等功能PhotoSwipe插件官方网站 http://www.photo
- 本文章面向有一定基础的python学习者,使用Pygame包开发一款简单的游戏首先打开命令行,使用PyPI下载Pygame包(输入命令pip
- 前文昨天家里来人,老姐的小孩儿抢着跟我玩电脑,result........很久很久之后!!那你想错了,我可不是欺负小孩子的那种人。老实人本人
- AJAX简介AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。AJA
- 用了这么长时间,发现自己竟然不知道utf_bin和utf_general_ci这两者到底有什么区别。。ci是 case insensitiv
- 方式1.打开Windows的cmd,在cmd中输入jupyter notebook --generate-config如下图:
- 本文实例讲述了jdbc操作mysql数据库的方法。分享给大家供大家参考。具体如下:import java.sql.*;import java
- 简单Python词法分析器实现,供大家参考,具体内容如下词法分析器状态转换图:词法分析器总流程图:预处理程序:词法分析器:词法分析器程序详细
- <!-- -----------[test]表生成脚本---------------
- select serverproperty('productlevel') 如果没有打过SP,则为RTM,否则显示的是SP版
- 官方网站:http://www.extjs.com/演示地址:http://www.yaohaixiao.com/effects/sampl
- 在介绍ensure内部的实现之前,让我们先来看看其功能: ensure({ html: "popup.html", ja
- 一、介绍在做YOLOv3项目时,会需要将文本文件中的某部分内容进行批量替换和修改,所以编写了python程序批量替换所有文本文件 * 定部分的
- 使用matplotlib中的一些函数将tensorflow中的数据可视化,更加便于分析import tensorflow as tfimpo
- 关于string的split 和 join 方法对导入os模块进行os.path.splie()/os.path.join() 貌似是处理机
- 简洁的隐藏垂直菜单在hover时将内容展开。这样的效果在JS里有很多个版本,但这个可以说是绝无仅有的CSS版本。此菜单可以在IE5.5,IE
- baiduclient.pyimport urllib.parseimport gzipimport jsonimport refrom h
- 继续List: 删除元素: a =[1, 2, 3, 4] a[2:3] = [] #[1, 2, 4] del a[2] #[1, 2]