前言

前段时间做了一个爬取妹子套图的小功能,小伙伴们似乎很有兴趣,为了还特意组建了一个Python兴趣学习小组,来一起学习。十个python九个爬,在大家的印象中好像Python只能做爬虫。然而并非如此,Python 也可以做Web开发,接下来给大家展示一下如何做一个小说站点。

相关软件

环境搭建说明:

爬取数据

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

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

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.py

from 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 小说下载工具_使用tkinter打造一个小说下载器,想看什么小说,就下什么...

    前言 今天教大家用户Python GUI编程--tkinter 打造一个小说下载器,想看什么小说,就下载什么小说 先看下效果图 Tkinter 是使用 python 进行窗口视窗设计的模块.Tkint ...

  2. python seo cms_巧用帝国CMS系统变量提升网站用户体验 完善SEO优化

    使用帝国CMS的小伙伴们可能都会在帝国CMS手册里面看到一些自带的系统变量,举个例子,也是最近刚开始使用的一个系统变量即:$GLOBALS[navclassid]这个变量意思是当前栏目id,$GLOB ...

  3. python小项目案例-python_flask小项目实例-编一个小网站

    要完成是这样一个网站:http://www.yushu.im/,该网站主要是赠送书的一个平台(公益性的) 网站框架功能: 网站的搭建 前期准备(用pycharm直接创建应该也可以,感觉直接创简单) 新 ...

  4. python爬虫——从此不用再愁找不到小说txt文件

    python爬虫--从此不用再愁找不到小说txt文件 最近在学习python,学了个大概就开始写爬虫了,之前做了个糗百的简单爬虫,然后底下还做了一些学校教务系统的爬虫,爬取了自己的成绩,看着挂科的大英 ...

  5. python爬取小说写入txt_对新笔趣阁小说进行爬取,保存和下载!这就是Python的魅力...

    原标题:对新笔趣阁小说进行爬取,保存和下载!这就是Python的魅力 以前挺爱在笔趣阁看小说的(老白嫖怪了) 现在学了一点爬虫技术,就自然而然的想到了爬取笔趣阁的小说 也算锻炼一下自己的技术,就以新笔 ...

  6. python tkinter下载器_下载小说还要去找网站?Python使用tkinter打造一个小说下载器...

    前言 今天教大家用户Python GUI编程--tkinter 打造一个小说下载器,想看什么小说,就下载什么小说 先看下效果图 Tkinter 是使用 python 进行窗口视窗设计的模块.Tkint ...

  7. Python学习笔记,爬取笔趣阁小说

    学习了基础的语法,然后网上看到有人分享利用python爬取小说,自己拷贝了代码尝试了一下. 1. 环境准备 安装 BeautifulSoup4 和 lxml & C:/Python39/pyt ...

  8. ios 分段 判断 小说阅读器_还在用别的小说阅读器?今天教你用Python制作简易小说阅读器!...

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于腾讯云 作者:Python进阶者 /前言/ 不知从什么时候开始.小说 ...

  9. 【Python】实现一个小说下载器,可以打包成exe(附原码)

    前言 闲的无聊,现在没得什么好剧追(你们或许可以给我推荐推荐) 朋友都在看小说,那我就来用Python搞一个小说下载器吧 顺便打包一下 实现步骤 爬虫基本四个步骤: 采集一章小说内容 发送请求, 模拟 ...

最新文章

  1. 开始学习吧,《算法》:动态连通性练习
  2. 秦刚:积累财富最简单的一种模式:打造一项高收入技能
  3. 解决Android 插件化方法找不到 问题
  4. 试题以文件的形式存在C语言,2016年计算机二级C语言上机题库
  5. 转 OFBiz 菜单组件(menu-widget)指引
  6. git 几种情况的回滚
  7. Little Sub and Balloons
  8. 设计模式六大原则——迪米特法则(LoD)
  9. Naive Operations
  10. 单选不生效为什么_“我这么努力刷题,为什么还是考不过税务师?”
  11. 28muduo_net库源码分析(四)
  12. JQ实现列表增删以及上下移动
  13. Spring框架IOC容器,依赖注入,控制反转
  14. JavaScript DOM 编程艺术(第2版)读书笔记 (7)
  15. noip模拟赛 蒜头君打地鼠
  16. 第三章 动态规划-基于模型的RL-强化学习理论学习与代码实现(强化学习导论第二版)
  17. *SQL Server系统表的应用
  18. HiJson 百度网盘下载
  19. 车载 DCDC 电源模块
  20. IMazing for Mac破解版永久激活方法

热门文章

  1. 毛书卿3.24纸白银原油今晚行情涨跌独家分析-黄金操作指导
  2. 了解 Boost Filesystem Library
  3. C语言学生成绩管理系统运行退不出来,哭诉、拜求C语言学生成绩管理系统
  4. php 表单页面跳转,form表单页面跳转方式提交练习
  5. 2019农产品质量安全追溯及管理溯源系统解决方案
  6. 重磅消息!视频号直播可以打赏了,微信上线“微信豆”丨国仁网络
  7. Android手机屏幕投影到大屏幕的工具
  8. aws ec2开启bbr加速
  9. 食住玩3dmax|室内设计师如何用CORONA设置成品效果图出大图的渲染参数?
  10. php中克隆对象,复制与克隆对象《 PHP 面向对象 》