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中一些自然语言工具的使用的入门教程
Apr 13 Python
Python实现简单的文件传输与MySQL备份的脚本分享
Jan 03 Python
Python中多个数组行合并及列合并的方法总结
Apr 12 Python
Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法
May 19 Python
基于Python实现定时自动给微信好友发送天气预报
Oct 25 Python
基于python框架Scrapy爬取自己的博客内容过程详解
Aug 05 Python
python切片(获取一个子列表(数组))详解
Aug 09 Python
使用Python实现Wake On Lan远程开机功能
Jan 22 Python
Python unittest工作原理和使用过程解析
Feb 24 Python
opencv python在视屏上截图功能的实现
Mar 05 Python
Python selenium使用autoIT上传附件过程详解
May 26 Python
Flask中sqlalchemy模块的实例用法
Aug 02 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 上传文件类型判断函数(避免上传漏洞 )
2010/06/08 PHP
解析PHP中empty is_null和isset的测试
2013/06/29 PHP
thinkPHP中volist标签用法示例
2016/12/06 PHP
PHP+MySQL实现模糊查询员工信息功能示例
2018/06/01 PHP
PHP中一个有趣的preg_replace函数详解
2018/08/15 PHP
js 父窗口控制子窗口的行为-打开,关闭,重定位,回复
2010/04/20 Javascript
仅IE不支持setTimeout/setInterval函数的第三个以上参数
2011/05/25 Javascript
固定表格行列(expression)在IE下适用
2013/07/25 Javascript
Node.js实现批量去除BOM文件头
2014/12/20 Javascript
基于jquery css3实现点击动画弹出表单源码特效
2015/08/31 Javascript
cocos2dx骨骼动画Armature源码剖析(一)
2015/09/08 Javascript
js验证真实姓名与身份证号是否匹配
2015/10/13 Javascript
Node.js文件操作方法汇总
2016/03/22 Javascript
jQuery组件easyui对话框实现代码
2016/08/25 Javascript
JavaScript编程设计模式之观察者模式(Observer Pattern)实例详解
2017/10/25 Javascript
解决vue 更改计算属性后select选中值不更改的问题
2018/03/02 Javascript
微信小程序自定义轮播图
2018/11/04 Javascript
Vue使用Clipboard.JS在h5页面中复制内容实例详解
2019/09/03 Javascript
vue循环数组改变点击文字的颜色
2019/10/14 Javascript
JavaScript 如何在浏览器中使用摄像头
2020/12/02 Javascript
WxPython建立批量录入框窗口
2019/02/27 Python
pybind11在Windows下的使用教程
2019/07/04 Python
python利用google翻译方法实例(翻译字幕文件)
2020/09/21 Python
python实现MySQL指定表增量同步数据到clickhouse的脚本
2021/02/26 Python
芬兰设计商店美国:Finnish Design Shop US
2019/03/25 全球购物
生产部统计员岗位职责
2014/01/05 职场文书
探矿工程师自荐信
2014/01/24 职场文书
《挑山工》的教学反思
2014/02/16 职场文书
党员干部观看《周恩来四个昼夜》思想汇报
2014/09/10 职场文书
滞留工资返还协议书
2014/10/19 职场文书
小学生作文评语集锦
2014/12/25 职场文书
老龙头导游词
2015/02/11 职场文书
汽车4S店销售经理岗位职责
2015/04/02 职场文书
教师工作证明范本
2015/06/12 职场文书
幼儿园教学反思范文
2016/03/02 职场文书
MySQL中JOIN连接的基本用法实例
2022/06/05 MySQL