python基于爬虫+django,打造个性化API接口


Posted in Python onJanuary 21, 2021

简述

今天也是同事在做微信小程序的开发,需要音乐接口的测试,可是用网易云的开放接口比较麻烦,也不能进行测试,这里也是和我说了一下,所以就用爬虫写了个简单网易云歌曲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

python基于爬虫+django,打造个性化API接口

其他的也就没什么可说的了,也是一个比较简单的测试需求,就是为了省点事情才弄得
好了,今天就到这了,拜拜

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

Python 相关文章推荐
python打开url并按指定块读取网页内容的方法
Apr 29 Python
详细解读Python的web.py框架下的application.py模块
May 02 Python
python使用fork实现守护进程的方法
Nov 16 Python
使用Python创建简单的HTTP服务器的方法步骤
Apr 26 Python
Django Sitemap 站点地图的实现方法
Apr 29 Python
python粘包问题及socket套接字编程详解
Jun 29 Python
Django中间件基础用法详解
Jul 18 Python
Django admin禁用编辑链接和添加删除操作详解
Nov 15 Python
python 实现屏幕录制示例
Dec 23 Python
Django中的模型类设计及展示示例详解
May 29 Python
python中取绝对值简单方法总结
Jul 24 Python
Python中logger日志模块详解
Aug 04 Python
Python 无限级分类树状结构生成算法的实现
Jan 21 #Python
python 制作网站筛选工具(附源码)
Jan 21 #Python
python使用scapy模块实现ping扫描的过程详解
Jan 21 #Python
Python 中如何使用 virtualenv 管理虚拟环境
Jan 21 #Python
python使用scapy模块实现ARP扫描的过程
Jan 21 #Python
Python3利用scapy局域网实现自动多线程arp扫描功能
Jan 21 #Python
Pandas直接读取sql脚本的方法
Jan 21 #Python
You might like
PHP通用检测函数集合
2011/02/08 PHP
php图片的裁剪与缩放生成符合需求的缩略图
2013/01/11 PHP
php魔术方法与魔术变量、内置方法与内置变量的深入分析
2013/06/03 PHP
解析Linux下Varnish缓存的配置优化
2013/06/20 PHP
PHP中auto_prepend_file与auto_append_file用法实例分析
2014/09/22 PHP
基于jquery的复制网页内容到WORD的实现代码
2011/02/16 Javascript
javascript 寻找错误方法整理
2014/06/15 Javascript
原生javascript实现获取指定元素下所有后代元素的方法
2014/10/28 Javascript
jQuery实现自定义下拉列表
2015/01/05 Javascript
JavaScript跨浏览器获取页面中相同class节点的方法
2015/03/03 Javascript
基于Vuejs实现购物车功能
2016/08/02 Javascript
BootStrap的select2既可以查询又可以输入的实现代码
2017/02/17 Javascript
JavaScript实现换肤功能
2017/09/15 Javascript
浅谈react前后端同构渲染
2017/09/20 Javascript
vue+canvas实现炫酷时钟效果的倒计时插件(已发布到npm的vue2插件,开箱即用)
2018/11/05 Javascript
javascript 函数的暂停和恢复实例详解
2020/04/25 Javascript
js实现翻牌小游戏
2020/07/31 Javascript
JavaScript 判断数据类型的4种方法
2020/09/11 Javascript
js回到页面指定位置的三种方式
2020/12/17 Javascript
JavaScript中跨域问题的深入理解
2021/03/04 Javascript
Python简单连接MongoDB数据库的方法
2016/03/15 Python
Python中使用asyncio 封装文件读写
2016/09/11 Python
pyenv命令管理多个Python版本
2017/03/26 Python
python中正则表达式 re.findall 用法
2018/10/23 Python
Python二进制文件读取并转换为浮点数详解
2019/06/25 Python
python wav模块获取采样率 采样点声道量化位数(实例代码)
2020/01/22 Python
Python3爬虫中Selenium的用法详解
2020/07/10 Python
建材业务员岗位职责
2013/12/08 职场文书
考试没考好检讨书
2014/01/31 职场文书
《明天,我们毕业》教学反思
2014/04/24 职场文书
学校教学工作总结2015
2015/05/19 职场文书
酒会开场白大全
2015/06/01 职场文书
MySQL 外键约束和表关系相关总结
2021/06/20 MySQL
Linux安装apache服务器的配置过程
2021/11/27 Servers
vue @ ~ 相对路径 路径别名设置方式
2022/06/05 Vue.js
Django框架中表单的用法
2022/06/10 Python