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 相关文章推荐
Django框架中的对象列表视图使用示例
Jul 21 Python
利用Python实现Windows定时关机功能
Mar 21 Python
Python实现获取照片拍摄日期并重命名的方法
Sep 30 Python
Python实现PS图像调整黑白效果示例
Jan 25 Python
python2.7实现FTP文件下载功能
Apr 15 Python
使用python 打开文件并做匹配处理的实例
Jan 02 Python
详解python中init方法和随机数方法
Mar 13 Python
Python 获取numpy.array索引值的实例
Dec 06 Python
Django中modelform组件实例用法总结
Feb 10 Python
Python OpenCV中的numpy与图像类型转换操作
Dec 11 Python
为了顺利买到演唱会的票用Python制作了自动抢票的脚本
Oct 16 Python
python 使用tkinter与messagebox写界面和弹窗
Mar 20 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
图书管理程序(二)
2006/10/09 PHP
php cookies中删除的一般赋值方法
2011/05/07 PHP
PHP 数组和字符串互相转换实现方法
2013/03/26 PHP
php上传文件常见问题总结
2015/02/03 PHP
PHP实现搜索地理位置及计算两点地理位置间距离的实例
2016/01/08 PHP
浅谈PHP中的错误处理和异常处理
2017/02/04 PHP
Laravel源码解析之路由的使用和示例详解
2018/09/27 PHP
基于jquery的气泡提示效果
2010/05/31 Javascript
javascript 文本框水印/占位符(watermark/placeholder)实现方法
2012/01/15 Javascript
Three.js源码阅读笔记(基础的核心Core对象)
2012/12/27 Javascript
javascript中简单的进制转换代码实例
2013/10/26 Javascript
js实现点击添加一个input节点
2014/12/05 Javascript
AngularJS + Node.js + MongoDB开发的基于高德地图位置的通讯录
2015/01/02 Javascript
jquery.mobile 共同布局遇到的问题小结
2015/02/10 Javascript
jQuery Mobile操作HTML5的常用函数总结
2016/05/17 Javascript
vue.js 表格分页ajax 异步加载数据
2016/10/18 Javascript
Bootstrap 填充Json数据的实例代码
2017/01/11 Javascript
angularjs封装$http为factory的方法
2017/05/18 Javascript
Angular 4依赖注入学习教程之简介(一)
2017/06/04 Javascript
JSON 数据格式详解
2017/09/13 Javascript
vue基于mint-ui的城市选择3级联动的示例
2017/10/25 Javascript
tangram.js库实现js类的方式实例分析
2018/01/06 Javascript
微信小程序实现漂亮的弹窗效果
2020/05/26 Javascript
jquery实现简单拖拽效果
2020/07/20 jQuery
[02:24]DOTA2痛苦女王 英雄基础教程
2013/11/26 DOTA
python+pyqt实现右下角弹出框
2017/10/26 Python
Django中使用Celery的方法示例
2018/11/29 Python
python 浅谈serial与stm32通信的编码问题
2019/12/18 Python
利用pandas将非数值数据转换成数值的方式
2019/12/18 Python
实现Python3数组旋转的3种算法实例
2020/09/16 Python
咖啡为什么会有酸味?你喝到的咖啡為什麼是酸的?
2021/03/17 冲泡冲煮
基于Modernizr 让网站进行优雅降级的分析
2013/04/21 HTML / CSS
银行职员思想汇报
2013/12/31 职场文书
公司总经理任命书
2014/06/05 职场文书
2014党员学习兰辉先进事迹思想汇报
2014/09/17 职场文书
股权转让协议范本
2014/12/07 职场文书