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实现的购物车功能示例
Feb 11 Python
如何优雅地改进Django中的模板碎片缓存详解
Jul 04 Python
python sklearn库实现简单逻辑回归的实例代码
Jul 01 Python
python修改FTP服务器上的文件名
Sep 11 Python
Python 转换RGB颜色值的示例代码
Oct 13 Python
python中dict()的高级用法实现
Nov 13 Python
Python爬虫HTPP请求方法有哪些
Jun 03 Python
如何在windows下安装配置python工具Ulipad
Oct 27 Python
Windows环境下Python3.6.8 importError: DLLload failed:找不到指定的模块
Nov 01 Python
python3 使用ssh隧道连接mysql的操作
Dec 05 Python
2020年10款优秀的Python第三方库,看看有你中意的吗?
Jan 12 Python
Python实现制作销售数据可视化看板详解
Nov 27 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
php5 mysql分页实例代码
2008/04/10 PHP
php数组函数序列之array_key_exists() - 查找数组键名是否存在
2011/10/29 PHP
php设计模式之命令模式的应用详解
2013/05/21 PHP
php继承中方法重载(覆盖)的应用场合
2015/02/09 PHP
PHP文件管理之实现网盘及压缩包的功能操作
2017/09/20 PHP
PHP实现动态添加XML中数据的方法
2018/03/30 PHP
php计数排序算法的实现代码(附四个实例代码)
2020/03/31 PHP
jQuery(1.3.2) 7行代码搞定跟随屏幕滚动的层
2009/05/21 Javascript
用js来定义浏览器中一个左右浮动元素相对于页面主体宽度的位置的函数
2012/01/21 Javascript
js实现从中间开始往上下展开网页窗口的方法
2015/03/02 Javascript
jquery validate和jquery form 插件组合实现验证表单后AJAX提交
2015/08/26 Javascript
jQuery中attr()与prop()函数用法实例详解(附用法区别)
2015/12/29 Javascript
详述JavaScript实现继承的几种方式(推荐)
2016/03/22 Javascript
50 个 jQuery 插件可将你的网站带到另外一个高度
2016/04/26 Javascript
JS中substring与substr的用法
2016/11/16 Javascript
vue2 如何实现div contenteditable=“true”(类似于v-model)的效果
2017/02/08 Javascript
vue2组件之select2调用的示例代码
2017/10/12 Javascript
JavaScript实用代码小技巧
2018/08/23 Javascript
浅析Angular 实现一个repeat指令的方法
2019/07/21 Javascript
Node.js创建一个Express服务的方法详解
2020/01/06 Javascript
vue2.x 对象劫持的原理实现
2020/04/19 Javascript
vue 路由懒加载中给 Webpack Chunks 命名的方法
2020/04/24 Javascript
python中enumerate的用法实例解析
2014/08/18 Python
详解python基础之while循环及if判断
2017/08/24 Python
Python配置文件处理的方法教程
2019/08/29 Python
苏宁红孩子母婴商城:redbaby
2017/02/12 全球购物
巴西男士个人护理产品商店:SHOP4MEN
2017/08/07 全球购物
美国领先的家庭智能音响系统品牌:Sonos
2018/07/20 全球购物
美国帽子俱乐部商店:Hat Club
2019/07/05 全球购物
初级Java程序员面试题
2016/03/03 面试题
护士自荐信
2013/10/25 职场文书
网上快餐厅创业计划书
2014/02/01 职场文书
2014年车间主任工作总结
2014/12/10 职场文书
学生退学证明
2015/06/23 职场文书
出纳2015年度工作总结范文
2015/10/14 职场文书
餐厅开业活动方案
2019/07/08 职场文书