侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

利用Python如何实现一个小说网站雏形

Python  /  管理员 发布于 7年前   226

前言

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

下面话不多说了,来一起看看详细的介绍吧

相关软件

软件 版本 功能 地址
Python 3.7.1 脚本语言 https://www.python.org/
Django 2.1.3 Web框架 https://www.djangoproject.com/
PyCharm 2018.2.4 可视化开发工具 http://www.jetbrains.com/pycharm/

环境搭建说明:

linux下安装python3环境:https:///article/109580.htm

Window 64位下python3.6.2环境搭建图文教程:https:///article/147707.htm

爬取数据

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

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

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 codecsfrom bs4 import BeautifulSoupimport sysimport mysql_DBUtilsfrom mysql_DBUtils import MyPymysqlPoolimport importlibimportlib.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/'# 定义DBmysql = MyPymysqlPool("dbMysql")# 获取章节内容def get_contents(chapter):req = requests.get(url=chapter)html = req.contenthtml_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.contenthtml_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.stringwrite_db(chapter, content)except Exception as e:print(e)mysql.dispose()if __name__ == '__main__':main()

更多代码详见:

https://gitee.com/52itstyle/Python/tree/master/Day04

Web实现

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

Django 框架的核心组件有:

  • 用于创建模型的对象关系映射
  • 为最终用户设计的完美管理界面
  • 一流的 URL 设计
  • 设计者友好的模板语言
  • 缓存系统

创建项目

pip install Django# 创建一个项目python django-admin.py startproject itstyle# 切换目录cd itstyle# 创建Apppython manage.py startapp novel

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

# 默认端口是8000python 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 urlfrom django.urls import pathfrom view import indexurlpatterns = [# 《星辰变》首页Listpath('', index.main), # new# 章节页面 正则匹配 path('chapter/<int:novel_id>/', index.chapter), # new]

代码实现:

from django.http import HttpResponsefrom django.shortcuts import renderfrom 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="https:chapter/{{novel.id}} " rel="external nofollow" ><li>{{ novel.title }}</li></a>{% endfor %}

小结

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

源码:https://gitee.com/52itstyle/Python/tree/master/Day06/novel (本地下载)

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家的支持。


  • 上一条:
    程序员写Python时的5个坏习惯,你有几条?
    下一条:
    Python + selenium + requests实现12306全自动抢票及验证码破解加自动点击功能
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客