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绘制MySQL数据图实现数据可视化
Mar 30 Python
浅谈python字符串方法的简单使用
Jul 18 Python
Python3如何解决字符编码问题详解
Apr 23 Python
Python 实现数据库(SQL)更新脚本的生成方法
Jul 09 Python
如何在sae中设置django,让sae的工作环境跟本地python环境一致
Nov 21 Python
Python异常对代码运行性能的影响实例解析
Feb 08 Python
python3学生名片管理v2.0版
Nov 29 Python
Python 处理图片像素点的实例
Jan 08 Python
python rsa实现数据加密和解密、签名加密和验签功能
Sep 18 Python
从多个tfrecord文件中无限读取文件的例子
Feb 17 Python
Python3爬虫中关于中文分词的详解
Jul 29 Python
再谈python_tkinter弹出对话框创建
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
xml+php动态载入与分页
2006/10/09 PHP
关于文本留言本的分页代码
2006/10/09 PHP
PHP5中的时间相差8小时的解决办法
2008/03/28 PHP
SSO单点登录的PHP实现方法(Laravel框架)
2016/03/23 PHP
php分页原理 分页代码 分页类制作教程
2016/09/23 PHP
js中如何复制一个对象并获取其所有属性和属性对应的值
2013/10/24 Javascript
jquery改变tr背景色的示例代码
2013/12/28 Javascript
js插件YprogressBar实现漂亮的进度条效果
2015/04/20 Javascript
NodeJs中的VM模块详解
2015/05/06 NodeJs
jquery模拟alert的弹窗插件
2015/07/31 Javascript
jQuery height()、innerHeight()、outerHeight()函数的区别详解
2016/05/23 Javascript
Vue实现搜索 和新闻列表功能简单范例
2018/03/16 Javascript
vue form 表单提交后刷新页面的方法
2018/09/04 Javascript
vue基础之data存储数据及v-for循环用法示例
2019/03/08 Javascript
深入探索VueJS Scoped CSS 实现原理
2019/09/23 Javascript
vue解决使用$http获取数据时报错的问题
2019/10/30 Javascript
微信小程序实现电影App导航和轮播
2020/11/30 Javascript
[46:47]2014 DOTA2国际邀请赛中国区预选赛 DT VS HGT
2014/05/22 DOTA
[02:50]【扭转乾坤,只此一招】DOTA2全新版本永雾林渊开启新篇章
2020/12/24 DOTA
Python中取整的几种方法小结
2017/01/06 Python
Python网络爬虫与信息提取(实例讲解)
2017/08/29 Python
PyQt5 窗口切换与自定义对话框的实例
2019/06/20 Python
Python文件路径名的操作方法
2019/10/30 Python
Django 自定义权限管理系统详解(通过中间件认证)
2020/03/11 Python
HTML5 Canvas的事件处理介绍
2015/04/24 HTML / CSS
法国女性内衣购物网站:Glamuse
2019/05/13 全球购物
代办委托书怎么写
2014/08/01 职场文书
户籍证明格式
2014/09/15 职场文书
小学四年级学生评语
2014/12/26 职场文书
部门经理迟到检讨书
2015/02/16 职场文书
课改心得体会范文
2016/01/25 职场文书
2019关于实习生工作安排及待遇的管理方案!
2019/07/16 职场文书
分析mysql中一条SQL查询语句是如何执行的
2021/06/21 MySQL
nginx请求限制配置方法
2021/07/09 Servers
进行数据处理的6个 Python 代码块分享
2022/04/06 Python
Go并发4种方法简明讲解
2022/04/06 Golang