news 2026/7/28 17:46:04

我用Python实现了一个小说网站雏形

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
我用Python实现了一个小说网站雏形

前言

十个python九个爬,在大家的印象中好像Python只能做爬虫。然而并非如此,Python 也可以做Web开发,接下来给大家展示一下如何做一个小说站点。

相关软件

软件版本功能地址
Python3.7.1脚本语言https://www.python.org/
Django2.1.3Web框架https://www.djangoproject.com/
PyCharm2018.2.4可视化开发工具http://www.jetbrains.com/pycharm/

环境搭建说明:

http://www.runoob.com/python3/python3-install.html

爬取数据

做一个小说网站,内容是必须的,首先我们爬取一本小说《星辰变》到数据库。

创建一个简单的数据库表:

''' 遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书! ''' CREATE TABLE `novel` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键', `title` varchar(100) NOT NULL COMMENT '标题', `content` text NOT NULL COMMENT '内容', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8

安装数据库驱动以及连接池:

# 数据库驱动 pip install pymysql # 数据库连接池 pip install DBUtils

代码实现:

''' 遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书! ''' # -*- coding: UTF-8 -*- # 导入requests库 import requests # 导入文件操作库 import codecs from bs4 import BeautifulSoup import sys import mysql_DBUtils from mysql_DBUtils import MyPymysqlPool import importlib importlib.reload(sys) # 给请求指定一个请求头来模拟chrome浏览器 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36'} server = 'http://www.biquge.cm' # 星辰变地址 book = 'http://www.biquge.cm/2/2042/' # 定义DB mysql = MyPymysqlPool("dbMysql") # 获取章节内容 def get_contents(chapter): req = requests.get(url=chapter) html = req.content html_doc = str(html, 'gbk') bf = BeautifulSoup(html_doc, 'html.parser') texts = bf.find_all('div', id="content") # 获取div标签id属性content的内容 \xa0 是不间断空白符   content = texts[0].text.replace('\xa0' * 4, '\n') return content # 写入数据库 def write_db(chapter, content): sql = "INSERT INTO novel (title, content) VALUES(%(title)s, %(content)s);" param = {"title": chapter, "content": content} mysql.insert(sql, param) # 主方法 def main(): res = requests.get(book, headers=headers) html = res.content html_doc = str(html, 'gbk') # 使用自带的html.parser解析 soup = BeautifulSoup(html_doc, 'html.parser') # 获取所有的章节 a = soup.find('div', id='list').find_all('a') print('总章节数: %d ' % len(a)) for each in a: try: chapter = server + each.get('href') content = get_contents(chapter) chapter = each.string write_db(chapter, content) except Exception as e: print(e) mysql.dispose() if __name__ == '__main__': main()

Web实现

Django 是一个开放源代码的Web应用框架,由 Python 写成。采用了 MVC 的框架模式,即模型M,视图V和控制器C。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件。

Django 框架的核心组件有:

  • 用于创建模型的对象关系映射
  • 为最终用户设计的完美管理界面
  • 一流的 URL 设计
  • 设计者友好的模板语言
  • 缓存系统
创建项目
pip install Django # 创建一个项目 python django-admin.py startproject itstyle # 切换目录 cd itstyle # 创建App python manage.py startapp novel

一般一个项目有多个app, 当然通用的app也可以在多个项目中使用,然后启动服务:

# 默认端口是8000 python manage.py runserver

如果提示端口被占用,可以用其它端口:

python manage.py runserver 8001

项目结构

最终代码,如下:

│ manage.py │ ├─novel │ │ settings.py # 基础配置 │ │ urls.py # URL映射 │ │ wsgi.py │ │ __init__.py │ │ │ ├─templates # 相关页面 │ novel.html # 章节 │ novel_list.html # 小说首页 ├─utils │ │ dbMysqlConfig.cnf # 数据库配置参数 │ │ encoder.py # 编码类 │ │ mysql_DBUtils.py # 数据库连接池 └─view │ index.py # 后台业务

要点备注

RESTful 风格

控制器 urls.py

''' 遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书! ''' from django.conf.urls import url from django.urls import path from view import index urlpatterns = [ # 《星辰变》首页List path('', index.main), # new # 章节页面 正则匹配 path('chapter/<int:novel_id>/', index.chapter), # new ]

代码实现:

''' 遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书! ''' from django.http import HttpResponse from django.shortcuts import render from utils.mysql_DBUtils import mysql # 《星辰变》章节列表 def main(request): sql = "SELECT id,title FROM novel LIMIT 10;" result = mysql.getAll(sql) # result = json.dumps(result, cls=MyEncoder, ensure_ascii=False, indent=4) # result = json.loads(result) context = {'novel_list': result} return render(request, 'novel_list.html', context) # def chapter(request): # id = request.GET['id'] # sql = "SELECT content FROM novel where id = %(id)s;" # param = {"id": id} # result = mysql.getOne(sql, param) # context = {'novel': result} # return render(request, 'novel.html', context) ''' 单个章节 此处 novel_id 对应 urls.py 中的 <int:novel_id> 你可以访问:http://localhost:8000/chapter/1/ ''' def chapter(request, novel_id): sql = "SELECT title,content FROM novel where id = %(id)s;" param = {"id": novel_id} result = mysql.getOne(sql, param) context = {'novel': result} return render(request, 'novel.html', context)
列表展示

基于后端返回的数据,在前台进行展示,这里你可以把它想象成Java中的Struts2标签或者JSTL标签,当然也有点Vue的意思:

{% for novel in novel_list %} <a href="/chapter/{{novel.id}} "><li>{{ novel.title }}</li></a> {% endfor %}

小结

至此,一个简单的Web项目雏形已经完成,当然还有很多需要优化的地方

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/28 17:45:04

Navicat重置工具终极指南:3种简单方法解决试用到期问题

Navicat重置工具终极指南&#xff1a;3种简单方法解决试用到期问题 【免费下载链接】navicat_reset_mac navicat mac版无限重置试用期脚本 Navicat Mac Version Unlimited Trial Reset Script 项目地址: https://gitcode.com/gh_mirrors/na/navicat_reset_mac 还在为Nav…

作者头像 李华
网站建设 2026/7/28 17:44:03

如何3步轻松下载国家中小学智慧教育平台电子课本PDF

如何3步轻松下载国家中小学智慧教育平台电子课本PDF 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具&#xff0c;帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载&#xff0c;让您更方便地获取课本内容。 项目地址: https://git…

作者头像 李华
网站建设 2026/7/28 17:43:40

python - AES加密解密

安装依赖库 pip install pycryptodomefrom binascii import b2a_base64, a2b_base64 from Crypto.Cipher import AESclass AES_CBC():def __init__(self, key, iv):# key必须为16位字符串self.key bytes(key, encodingutf-8)self.iv bytes(iv, encodingutf-8)# 加密。text:需…

作者头像 李华
网站建设 2026/7/28 17:42:47

电磁场仿真中的模型降阶技术解析与应用

1. 电磁场耦合仿真中的模型降阶技术解析 作为一名从事电磁场仿真工作十余年的工程师&#xff0c;我见证了计算电磁学领域从全波仿真到降阶模型的演进历程。模型降阶技术&#xff08;Model Order Reduction, MOR&#xff09;已经成为处理复杂电磁耦合系统的必备工具&#xff0c;…

作者头像 李华
网站建设 2026/7/28 17:38:25

ComfyUI-WanVideoWrapper:三步开启你的免费AI视频创作之旅

ComfyUI-WanVideoWrapper&#xff1a;三步开启你的免费AI视频创作之旅 【免费下载链接】ComfyUI-WanVideoWrapper 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI-WanVideoWrapper 想要轻松制作专业级AI视频&#xff0c;却苦于复杂的安装配置&#xff1f;C…

作者头像 李华