栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python django百度搜索图片分页

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python django百度搜索图片分页

django实现分页功能
  • 1 创建django项目和所需数据库及应用
  • 2 修改setting.py配置文件
  • 3 修改WebExpress/urls.py配置
  • 4 修改picture/urls.py配置
  • 5 修改picture/models.py配置
  • 6 添加picture/baidu_picture.py文件
  • 7 修改picture/views.py
  • 8 添加picture/templates/picture_list.html文件
  • 9 数据库迁移并生成数据表
  • 10 运行项目
  • 11 页面显示

参考视频链接:
https://www.bilibili.com/video/BV1Tu411r7qx?p=43

1 创建django项目和所需数据库及应用
# 1 创建数据库WebExpress
mysql -uroot -p123456
create database WebExpress default charset utf8;

# 2 创建项目project
django-admin startproject WebExpress

# 3 创建应用app01
cd project
python manage.py startapp picture
2 修改setting.py配置文件
ALLOWED_HOSTS = ['*']

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'picture.apps.PictureConfig',
]

DATABASES = https://blog.csdn.net/wang_ze6456/article/details/{
    'default': https://blog.csdn.net/wang_ze6456/article/details/{
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'WebExpress',
        'USER': 'root',
        'PASSWORD': 'Huawei@123',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}

3 修改WebExpress/urls.py配置
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('picture/', include('picture.urls')),
]
4 修改picture/urls.py配置
from . import views
from django.urls import path

urlpatterns = [
    path('list/', views.picture_list, name='picture_list'),
]
5 修改picture/models.py配置
from django.db import models


class PictureList(models.Model):
    picture_name = models.CharField(max_length=200)
    query_word = models.CharField(max_length=200)
    picture_url = models.CharField(max_length=200)

6 添加picture/baidu_picture.py文件
# -*- coding:utf8 -*-
import json
import requests
import random
from . import models


class BaiduPictureDownload:

    def __init__(self, query_word):
        self.query_word = query_word

        self.user_agent = [
            "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1",
            "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36",
            "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11",
            "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1"
        ]

        self.headers = https://blog.csdn.net/wang_ze6456/article/details/{
            "User-Agent": random.choice(self.user_agent),
            "sec-ch-ua-platform": "macOS",
            "X-Requested-With": "XMLHttpRequest",
            "Sec-Fetch-Site": "same-origin",
            'sec-ch-ua': '" Not A;Brand";v="99", "Chromium";v="102", "Google Chrome";v="102"',
           }

    def response(self):

        url = "https://image.baidu.com/search/acjson?tn=resultjson_com&" 
              "logid=8570046982900849301&" 
              "ipn=rj&" 
              "ct=201326592&" 
              "is=&fp=result&fr=&" 
              "word=%s" 
              "queryWord=%s" 
              "cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&" 
              "z=0&ic=0&hd=0&latest=0©right=0&s=&se=&tab=&" 
              "width=&height=&face=0&istype=2&qc=&nc=1&" 
              "expermode=&nojc=&isAsync=&pn=100&rn=100&gsm=3c&1654497570412=" %(self.query_word, self.query_word)

        resp = requests.get(url=url, headers=self.headers)
        return json.loads(resp.text)

    def result(self):
        json_info = self.response().get('data')
        for picture_info in json_info:
            if picture_info.get('thumbURL') and picture_info.get('fromPageTitleEnc'):
                data = https://blog.csdn.net/wang_ze6456/article/details/{
                    'picture_url': picture_info.get('thumbURL'),
                    'query_word': self.query_word,
                    'picture_name': picture_info.get('fromPageTitleEnc')
                }

                if not models.PictureList.objects.filter(**data).first():
                    models.PictureList.objects.create(**data)


if __name__ == '__main__':
    response = BaiduPictureDownload('娜扎')
    response.result()

7 修改picture/views.py
from django.shortcuts import render
from .baidu_picture import BaiduPictureDownload
from . import models
from django.utils.safestring import mark_safe


def picture_list(request):
    search_data = request.GET.get('q', "")
    if search_data:
        try:
            models.PictureList.objects.all().delete()
            response = BaiduPictureDownload(search_data)
            response.result()
        except Exception:
            pass

    page = int(request.GET.get('page', 1))
    page_size = 5
    start_page = (page - 1) * page_size
    end_page = page * page_size

    queryset = models.PictureList.objects.all()[start_page: end_page]
    #数据总条数
    total_count = models.PictureList.objects.all().count()

    # 总页码
    total_page_count, div = divmod(total_count, page_size)
    if div:
        total_page_count = total_page_count + 1

    # 计算出当前页,前5页后5页
    plus = 3

    if total_page_count <= (2 * plus + 1):

        # 数据库中的数据比较少,都没有达到11页
        first_5_pages = 1
        last_5_pages = total_page_count
    else:
        # 数据库中数据较多时

        # 当前页小于5
        if page <= plus:
            first_5_pages = 1
            last_5_pages = 2 * plus
        else:
            # 当前页 > 5
            # 当前页+5 > 总页面
            if (page + plus) > total_page_count:
                first_5_pages = total_page_count - 2 * plus
                last_5_pages = total_page_count
            else:
                first_5_pages = page - plus
                last_5_pages = page + plus

    page_str_list = []
    # ul开始标签
    ul_body_start_string = '
    ' page_str_list.append(ul_body_start_string) # 首页页码 home_page = '
  • 首页
  • '.format(1) page_str_list.append(home_page) # 上一页 if page > 1: previous = '
  • 上一页
  • '.format(page - 1 ) else: previous = '
  • 上一页
  • '.format(1) page_str_list.append(previous) # 翻页主体 for i in range(first_5_pages, last_5_pages + 1): if i == page: ele = '
  • {}
  • '.format(i,i) else: ele = '
  • {}
  • '.format(i,i) page_str_list.append(ele) # 下一页 if page < total_page_count: nextpage = '
  • 下一页
  • '.format(page + 1) else: nextpage = '
  • 下一页
  • '.format(total_page_count) page_str_list.append(nextpage) # 尾页 last_page = '
  • 尾页
  • '.format(total_page_count) page_str_list.append(last_page) # 搜索框 search_string = """
  • """ page_str_list.append(search_string) # ul开始标签 ul_body_end_string = '
' page_str_list.append(ul_body_end_string) page_string = mark_safe("".join(page_str_list)) return render(request, 'picture_list.html', locals())
8 添加picture/templates/picture_list.html文件



    
    Picture List
    
    





{% csrf_token %}
{% for i in queryset %} { forloop.counter }}--> {% endfor %}

https://blog.csdn.net/wang_ze6456/article/details/{{ queryset.0.query_word }}

ID 图片展示 图片名称
https://blog.csdn.net/wang_ze6456/article/details/{{ i.id }} https://blog.csdn.net/wang_ze6456/article/details/{{ i.picture_name }}
https://blog.csdn.net/wang_ze6456/article/details/{{ page_string }} ')
9 数据库迁移并生成数据表
python manage.py makemigrations
python manage.py migrate
10 运行项目
python manage.py runserver 0.0.0.0:8000
11 页面显示
http://127.0.0.1:8000/picture/list/?page=2

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/958439.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号