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从ftp下载数据保存实例
Nov 20 Python
Python for循环中的陷阱详解
Jul 13 Python
python实现全盘扫描搜索功能的方法
Feb 14 Python
树莓派安装OpenCV3完整过程的实现
Oct 10 Python
django实现用户注册实例讲解
Oct 30 Python
YUV转为jpg图像的实现
Dec 09 Python
pycharm 对代码做静态检查操作
Jun 09 Python
使用Python项目生成所有依赖包的清单方式
Jul 13 Python
什么是Python包的循环导入
Sep 08 Python
Python中requests做接口测试的方法
May 30 Python
Python实现socket库网络通信套接字
Jun 04 Python
Python Matplotlib库实现画局部图
Nov 17 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
网页游戏开发入门教程二(游戏模式+系统)
2009/11/02 PHP
解析使用substr截取UTF-8中文字符串出现乱码的问题
2013/06/20 PHP
php通过array_unshift函数添加多个变量到数组前端的方法
2015/03/18 PHP
Yii全局函数用法示例
2017/01/22 PHP
Javascript Function对象扩展之延时执行函数
2010/07/06 Javascript
jQuery的运行机制和设计理念分析
2011/04/05 Javascript
利用JS延迟加载百度分享代码,提高网页速度
2013/07/01 Javascript
Javascript遍历Html Table示例(包括内容和属性值)
2014/07/08 Javascript
使用CamanJS在Web页面上处理图像的技巧
2015/08/18 Javascript
JavaScript实现为input与textarea自定义hover,focus效果的方法
2015/08/21 Javascript
javascript下使用Promise封装FileReader
2016/02/19 Javascript
利用jQuery解析获取JSON数据
2017/04/08 jQuery
ES6新特性八:async函数用法实例详解
2017/04/21 Javascript
js导出Excel表格超出26位英文字符的解决方法ES6
2017/11/15 Javascript
JS实现json对象数组按对象属性排序操作示例
2018/05/18 Javascript
详解vue更改头像功能实现
2019/04/28 Javascript
Vue Extends 扩展选项用法完整实例
2019/09/17 Javascript
Openlayers3实现车辆轨迹回放功能
2020/09/29 Javascript
解决Element中el-date-picker组件不回填的情况
2020/11/07 Javascript
python抓取网页图片示例(python爬虫)
2014/04/27 Python
python中如何使用朴素贝叶斯算法
2017/04/06 Python
解决python给列表里添加字典时被最后一个覆盖的问题
2019/01/21 Python
Django单元测试中Fixtures的使用方法
2020/02/26 Python
python高阶函数map()和reduce()实例解析
2020/03/16 Python
优衣库澳大利亚官网:UNIQLO澳大利亚
2017/01/18 全球购物
彪马美国官网:PUMA美国
2017/03/09 全球购物
外语学院毕业生的自我鉴定
2013/11/28 职场文书
班组长岗位职责范本
2014/01/05 职场文书
优秀班干部事迹材料
2014/01/26 职场文书
销售总经理岗位职责
2014/03/15 职场文书
广播体操比赛口号
2014/06/10 职场文书
2016母亲节感恩话语
2015/12/09 职场文书
2017寒假社会实践心得体会范文
2016/01/14 职场文书
2016年学生会感恩节活动总结
2016/04/01 职场文书
导游词之塘栖古镇
2019/12/04 职场文书
详解overflow:hidden的作用(溢出隐藏、清除浮动、解决外边距塌陷)
2021/07/01 HTML / CSS