前言

前段时间做了一个爬取妹子套图的小功能,小伙伴们似乎很有兴趣,为了还特意组建了一个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/

环境搭建说明:

爬取数据

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

创建一个简单的数据库表: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

代码实现:# -*- 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.pyfrom django.conf.urls import url

from django.urls import path

from view import index

urlpatterns = [

# 《星辰变》首页List

path('', index.main), # new

# 章节页面 正则匹配

path('chapter//', index.chapter), # new

]

代码实现: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 中的

你可以访问: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 %}

{{ novel.title }}

{% endfor %}

小结

至此,一个简单的Web项目雏形已经完成,当然还有很多需要优化的地方,小伙伴们可以关注从零学 Python,持续更新。

python 小说cms系统_我用Python实现了一个小说网站雏形相关推荐

  1. python 小说cms系统_狂雨小说cms开源系统附安装教程-狂雨小说CMS系统(外加一套采集规律)下载两款优化版-西西软件下载...

    狂雨小说CMS系统(外加一套采集规律)是一款狂雨小说cms建站内容管理平台系统,内置标签模版,即使不懂代码的前端开发者也可以快速建立一个漂亮的小说网站.用狂雨小说cms搭建自己的小说站. 系统要求 P ...

  2. python 小说cms系统_「博文小说网」Python爬虫爬取小说网站 - seo实验室

    博文小说网 #!/usr/bin/env Python # -*- coding: utf-8 -*- # @Author : Woolei # @File : book136_singleproce ...

  3. python做bi系统_如何使用Python创建可视化对象

    早前,Power BI就已经支持使用Python创建可视化对象了,当你遇到自定义程度较高的可视化对象时,Python就大大的派上了用场:那么我们如何使用呢?接下来小悦就为各位伙伴们介绍一下吧~ 首先, ...

  4. python做oa系统_浅谈python进行webapp,oa系统开发 (更新中) | 学步园

    入门篇: 1.开发环境的搭建(利用virtualenv进行个性化的python开发环境的搭建(python  grapplli dgango  south tornado python-mysql   ...

  5. python 文字处理系统_详解Python中的文本处理

    字符串 -- 不可改变的序列 如同大多数高级编程语言一样,变长字符串是 Python 中的基本类型.Python 在"后台"分配内存以保存字符串(或其它值),程序员不必为此操心.P ...

  6. 漫画小说CMS系统源码

    漫画小说CMS系统源码是一套采用CI框架内核进行开发,在PHP+MMYSQL环境下运行的完善而强大的快速建站系统. 系统采用MVC模板分离,内置标签,自定义函数标签接口,强大的采集功能,只要你会HTM ...

  7. 狂雨小说CMS系统源码附模板

    介绍: 狂雨1.2.2小说CMS系统源码带两套优化模板和一套采集规则,带安装教程 源码仅供个人技术参考,严禁商业或者非法用途! 网盘下载地址: http://kekewangLuo.net/hbuoj ...

  8. 狂雨1.2.2小说CMS系统源码 附两套优化模板 一套采集规则

    介绍: 狂雨1.2.2小说CMS系统源码带两套优化模板和一套采集规则,带安装教程 网盘下载地址: http://kekewl.cc/Zy4inCgIEnL 图片:

  9. python绘制彩色同心圆_如何用python画同心圆

    Python是一种计算机程序设计语言.是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本,随着版本的不断更新和语言新功能的添加,越来越多被用于独立的.大型项目的开发.Python在设计上坚持了 ...

  10. python分布式爬虫系统_如何构建一个分布式爬虫:理论篇

    前言 本系列文章计划分三个章节进行讲述,分别是理论篇.基础篇和实战篇.理论篇主要为构建分布式爬虫而储备的理论知识,基础篇会基于理论篇的知识写一个简易的分布式爬虫,实战篇则会以微博为例,教大家做一个比较 ...

最新文章

  1. oracle索引优劣,ORACLE的五种表的优缺点概述
  2. spring配置文件中分别使用多个properties文件
  3. 带你学python基础:列表List
  4. Google Maps——页面提示[For development purposes only]解决方案
  5. 请举例说明@Qualifier 注解?
  6. 7-3 旅游规划 (25 分)(C语言实现)
  7. php 判断是否文件,php 判断是否一个文件的函数is_file()应用举例
  8. 14-容器网络之host和none
  9. 关于linux系统端口查看和占用的解决方案
  10. JMeter 做接口性能测试,YYDS!
  11. 枚举算法:求解不等式
  12. robotframework的学习笔记(十六)----robotframework标准库String
  13. c语言中的循环移位函数,C ++中循环移位(旋转)操作的最佳实践
  14. 字节跳动重磅发布 2022 年 6 大前端技术发展趋势
  15. leancloud 怎么绑定域名_云引擎支持绑定加速域名 | LeanCloud 八月变化
  16. 【转】Tapestry5和Eclipse的整合
  17. 本周最新文献速递20211219
  18. 百度在首页输出console发布招聘信息
  19. 你一定要掌握的三条IT运维面试技巧
  20. HTML5 进阶系列:文件上传下载

热门文章

  1. zookeeper做分布式配置中心
  2. cannot spawn XXX\bin\TortoiseGitPlink.exe: No such file or directory
  3. java 的初始化顺序
  4. vue-cli --动态配置Ip地址,而不需要每次都打包
  5. linux任务计划、chkconfig工具、systemd、unit和target介绍
  6. alembic生成数据库升级脚本
  7. 根据TTL值判断目标主机的类型
  8. CSS圆角兼容IE6
  9. IE9 下 Flash 显示列表中没有对象后不再显示的Bug
  10. 【技术帖】Mysql The 'InnoDB' feature is disabled; you n