美文网首页Django
Django -通过isbn读取豆瓣的数据

Django -通过isbn读取豆瓣的数据

作者: Shawn丶 | 来源:发表于2019-04-13 02:54 被阅读0次

以前都是写接口给别人读取数据,首次尝试读取豆瓣图书的数据
已经成功,特发此文。

一、本文概要

利用Django写了一个API,然后后端读取通过isbn搜到的豆瓣图书的信息简要,
存入专门建立的一个数据库中,然后再把自己所需要的数据拣出来通过API传给前端。
其实本文只做了一个功能,即把豆瓣图书的信息存到自己的数据库。

二、准备工作

1、豆瓣图书的API
https://api.douban.com/v2/book/isbn/9787506394864?apikey=*****
因为豆瓣的原因,现在的开发者访问都需要一个apikey,因为本人用的是网上随便找的apikey,不是自己的,因此在这隐去(如有需要,可评论)

上述isbn对应的书籍详情.png

2、django项目
我这里建立了一个tool项目,以及api的应用。

三、数据库models的建立

我这边选取了书名,作者,出版社,isbn,简介以及图片信息。这里根据自己需求定义即可。

from django.db import models
class Book(models.Model):
    title = models.CharField(max_length = 64)
    author = models.CharField(max_length= 64)
    publisher = models.CharField(max_length= 64, default='')
    isbn = models.CharField(max_length= 64, default='')
    summary = models.CharField(max_length= 1280, default= '')
    image = models.CharField(max_length=320, default='')

四、读取豆瓣图书的数据

我这边用了接口的形式,上一篇文章着重讲了如何写接口,我这边直接贴代码了。如果不用接口也是可以实现读取数据的。在代码里,我做了略微的解析。
我的urls.py的数据

from django.contrib import admin
from django.urls import path
from api import views

urlpatterns = [
    path('api/test/', views.TestView.as_view()),
    path('admin/', admin.site.urls),
]

接下来是api里面的views的编写

from urllib.request import Request, urlopen
import json

class TestView(APIView):

    authentication_classes = []
    def get(self, request, *args, **kwargs):
        ret = {'code':1000, 'msg':None,'token':None}
        try:
            isbn = request._request.GET.get('isbn')
            # 豆瓣网站获取数据Api
            url = 'https://api.douban.com/v2/book/isbn/'+isbn+'?apikey=0b2bdeda43b5688921839c8ecb20399b'
            # 包装头部
            firefox_headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}
            # 构建请求
            request = Request(url, headers=firefox_headers)
            html = urlopen(request)
            # 获取数据
            data = html.read()
            # 转换成JSON
            data_json = json.loads(data)
            # print(data_json)
            title = data_json['title']
            author = data_json['author'][0]
            isbn13 = data_json['isbn13']
            publisher = data_json['publisher']
            summary = data_json['summary']
            images = data_json['images']
            #如果只是单纯的想要读取数据,那么只需要到这一步即可,
            # 相信你们都能够获取豆瓣api上的数据了

            #把数据print出了
            print('书名',title)
            print('作者',author)
            print('ISBN',isbn13)
            print('出版社',publisher)
            print('简介',summary)
            print('图片',images)

            # datas = json.dumps(data,ensure_ascii=False)

           #转存到自己新建的数据库
            models.RecommendBook.objects.create(title= title,author=author,isbn=isbn13,recommendrank=6,
                                                publisher=publisher,summary=summary,image=images)
            # obj.title = title
            # obj.author = author
            # obj.isbn = isbn13
            # obj.publisher = publisher
            # obj.summary = summary
            # obj.image = images
            # obj.save()
            ret['msg']='创建数据成功'


        except Exception as e:
            pass
        return JsonResponse(ret)

相关文章

网友评论

    本文标题:Django -通过isbn读取豆瓣的数据

    本文链接:https://www.haomeiwen.com/subject/qmmkwqtx.html