2020-08-27 KK日记,记录一下使用flask做的看小说网站

news/2024/5/9 19:37:41/文章来源:https://blog.csdn.net/harryho/article/details/108255508

1、前言

虽然一直干着运维的工作,但是对编程却有莫名的兴趣,于是就依仗着大学时的一些编程基础,在空闲时间自学了python、flask框架、bootstrap、jquery,html等。并用此写了一个看爽文的“工具”。

 

2、设计思路

通过爬虫爬取感兴趣的爽文,并将广告、飘窗过滤。

 

爬取后的爽文通过浏览器阅读,左边显示目录,通过点击目录,右边显示内容。

 

为了不占用个人电脑的空间暂时不保存爽文。

 

3、成品展示

 

4、撸码

 

 

4.1 构造flask

 

跳过按照flask,直接进入撸码

---------qqweb.py----------------

---------qqweb.py----------------
# -*-coding=utf-8 -*-
from flask import Flask,render_template,request
from flask import session
import os
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
# 显示中文
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8' app=Flask('__name__')
if __name__=='__main__':app.run(debug=True)

 

上面代码写完后,flask就跑起来了,,但是基本上什么功能都没有,这时,就要构建以下目录和代码。

 

4.2 flask目录结构

项目名称

----static #存放静态文件图片,css 等

----template #html 文件 配合flask jinja2使用

----novel #爽文爬取主程序目录

__init__.py

sw.py

qqweb.py

 

4.3 爽文爬虫类编写

约定:类函数和方法使用动词+名词小驼峰方式命名,如getCatalog

类名字大写。

--------sw.py

# -*- coding: utf-8 -*-
defaultencoding = 'utf-8'
import random
import time
import requests
import json
import datetime
import pickle
import threading
import schedule
from bs4 import BeautifulSoup           #经典html分析库文件
import urllib2
import sys
import pandas
from selenium import  webdriver                    #遇到一些要渲染的网站就靠它了
from selenium.webdriver.chrome.options import Options
import osreload(sys)
sys.setdefaultencoding(defaultencoding)class SW():#构建爬虫的头和初始化urldef __init__(self,swurl=None):self.url=swurlself.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36",'Content-Type': 'application/json'}def getCatalog(self):r = requests.request('get', self.url, headers=self.headers)       #有get ,有post  ,requests.post/get的变形r.encoding = 'UTF-8'    #编码,防止乱码html = r.text     # 获取html 源码文件,含有html标签print r.status_codebs = BeautifulSoup(html, "html5lib")taglist = bs.find_all("dd")          #搜索文件里含有dd标签的块。cataloglist=[]
#遍历搜索结果,类型是bs下的tag,这个tag使用方法非常强大,你可以直接访问html tag的子tag ,属性、text 
# 如dd tag下有一个a标签href的属性值,我们就可以用这个方式访问tag.a["href"]
#如dd tag下有一个a标签text的值(<a href='url'>qq </a>),我们就可以用这个方式访问tag.a.get_text() 就能得到qq的值。for tag in taglist:cataloglist.append((str(tag.a.text).strip(),"    http://www.xe.la"+tag.a["href"],chr(13)+chr(10)))return cataloglistdef saveCatalog(self,catalog):try:with open("../novel/sw.txt", 'w+') as f :for c in catalog:# print cf.write(c[0]+c[1]+c[2])return 1except Exception as e:print ereturn 0
#检查有没有更新def checkUpdate(self):with open("../novel/sw.txt", 'r') as f:oldcatalog=f.readlines()# print catalog# oldcatalog=catalog[-1]# oldcatalog=len(catalog)newcatalog=self.getCatalog()# oldlastchapter=oldcatalog.split()[0]# newlastchapter=newcatalog[-1][0].split()[0]diffcatalog=len(newcatalog)-len(oldcatalog)# print len(newcatalog),len(oldcatalog),diffcatalog# print newcatalog[1][0],oldcatalog[1].split()[0]if diffcatalog==0:print "无更新"return 0else:print "有%i更新"%(diffcatalog)self.saveCatalog(newcatalog)return 1
#获取章节内容,这里没有使用request去爬取,是因为网站好像使用了脚本做渲染,所以我需要使用浏览器渲染一下,这时使用了webdriver.Chrome,具体使用不细表。def getChapter(self,chapterurl):chrome_options = Options()chrome_options.add_argument('--headless')      #无头浏览器的属性指定,所谓无头就是不弹出浏览器novel_chrome = webdriver.Chrome(chrome_options=chrome_options)  novel_chrome.get(chapterurl) #输入网址发出请求html = novel_chrome.page_source #获取源码# print htmlnovel_chrome.close()novel_chrome.quit()# print htmlnovel_content = ""bs = BeautifulSoup(html, "html5lib")titles= bs.find_all("h1")for title in titles:novel_content = novel_content+title.get_text()novel_content = "<h1 align='center'>"+novel_content + "</h1>"tag_list = bs.find_all("div", attrs={"id": "content"})   #查找id=content的divfor tag in tag_list:novel_content = novel_content + tag.get_text()return novel_contentif __name__=='__main__':dmz=DaMengZhu("http://www.xb.la/1x/15xx7")        #我脱敏了

 

爬虫写好了,调试一下就可以用了。

 

4.4 展示页面的设计

由于不太熟悉的前端设计工具、代码的使用这里大多数都是把自己想法放在度娘上搜索,然后copy paste代码。

template

-----sw.html


<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>bootstrap测试</title><!-- 引用jquery bootstrap 等等。都是copy回来的,不求甚解 --><link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/4.1.0/css/bootstrap.min.css"><script src="https://cdn.staticfile.org/jquery/3.2.1/jquery.min.js"></script><script src="https://cdn.staticfile.org/popper.js/1.12.5/umd/popper.min.js"></script><script src="https://cdn.staticfile.org/twitter-bootstrap/4.1.0/js/bootstrap.min.js"></script></head><body><script>function get_news_alert(){alert("小说内容较多,请耐心等候!")}</script><!-- 倒入导航文件,不用重复copy,提升页面的简洁 -->{% include 'header.html' %}<!-- 使用div 标签进行页面布局,其中style 关键字可以以字典形式指定多种属性,如backgroud ; width :1400px; height等 --><!-- 这里的使用了一个div 嵌套了两个div --><div style="width:1400px"><!-- 要两个div 并排在一起,这里有一个重要属性float:left 和两个div的width不能大于外一层div的width overflow:scroll;滚动条的指定--><div class="form-group" style="overflow:scroll;height:2400px;width:150px;float:left" align="left" ><ul><!-- 一下是jinja2 的语法 不过多说明 -->{% for c in catalog %}<!-- 这里再说一下 a 标签和 iframe的联动,实现左边点击目录,右面显示内容,关键的key是target="指向iframe name属性的值" --><li> <a href="./content?dmzurl={{c[1].strip()}}" target="dmzcontent">{{c[0]}} </li>{%endfor%}</ul></div><div class="form-group" style="background:lightblue;width:1200px;float:left"><iframe src="" name="dmzcontent" style="width:1200px;height:2400px;border:0;frameborder:no" align="left"> </iframe></div></div></body></html>

4.5 flask路由编码

在qqweb.py上添加下面的代码,看无广告的小爽文的工具就完成了。

from novel import sw@app.route('/sw',methods=['POST','GET'])def ShowDMZCatalog():html=""dmz=sw.SW("http://www.xb.la/15/15977")catalog=dmz.getCatalog()# 这里的catalog变量值赋予template 中sw.html 中的{{catalog}}return render_template('sw.html',catalog=catalog)@app.route('/dmz/content',methods=['POST','GET'])def ShowDMZContent():html=""dmz=damengzhu.DaMengZhu()# 如果是以get的方法提交参数,需要用request.args.get('参数名字',type=unicode 支持汉字编码)chapterurl=request.args.get('dmzurl',type=unicode)content=dmz.getChapter(chapterurl)# 关键white-space:pre-wrap;word-wrap:break-word自动换行return '<div style="word-wrap:break-word;"> <pre style="white-space:pre-wrap;word-wrap:break-word;font-size:18px">'+ content +'</pre> </div>'

5、完成

完成,发布测试进行微调。

 

后续完成功能:

  1. 做一个定时任务,自动发现更新,然后拉取。
  2. 批量下载文件
  3. 尝试使用数据分析方法分析爽文人物性格和关系。

 

参考

推荐一个网站:

http://exploreflask.com/en/latest/blueprints.html

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_883721.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【易懂教程】在Github上搭建网站

首先&#xff0c;还是要说一下“写在前面的话”&#xff0c;文章属于个人学习笔记&#xff0c;抛砖引玉&#xff0c;希望能对你有微薄的帮助。 操作步骤&#xff1a; 既然是易懂教程&#xff0c;当然是图文并茂更能让你理解&#xff0c;将会大量采用图文形式进行讲解。 首先你…

手把手教你搭建网站环境——基于node后台的web服务

战前准备 下载好xftp(必备&#xff0c;用于上传你要部署的文件)&#xff1b;xshell作为windows而言是个非常好用的工具&#xff0c;不过像阿里本来就有控制台&#xff0c;倒不是必备&#xff0c;但是那个控制塔的字符丑得一匹&#xff0c;实在看不下去&#xff0c;我用xhell只…

网站/织梦首页或文章分享微信带缩略图和简介

1.在微信公众号号的基本设置里 2.公众号设置-功能设置-绑定好对应的域名 3.然后下载wechat.php文件下载&#xff0c;放在网站根目录&#xff08;下方提供了下载地址&#xff09; 4.把这段代码放到需要的页面里&#xff0c;url改成自己的域名 ig({ debug: 0,//如果分享失败&a…

如何实现分享网站文章到微信朋友圈时显示指定缩略图或LOGO

微信在分享第三方网站是不显示缩略图和描述的&#xff0c;如下图所示 要解决这个问题必须调用微信JS-SDK接口&#xff0c;下面讲一下如何调用接口 方法一&#xff1a; 第一部分 准备步骤 注册微信公众号。 通过左侧导航“开发”–“基本配置”进入。通过开发者ID及密码调用获取…

我的第一篇文章 ^_^庆祝我的个人网站开张

长沙开始下雨了&#xff0c;早上出去冻的不行&#xff0c;这就是南方的天气&#xff0c;没办法。想想我将要去读研的哈尔滨&#xff0c;现在已经在10度一下了&#xff0c;真不知道到时候怎么过。 下午去交研究生登记表&#xff0c;一份成绩单要盖4个章&#xff0c;每次办个什么…

discuz网站没备案无执照接入支付宝充值功能

discuz个人网站没备案无执照接入支付宝充值功能 文章目录 事情是这样的一、支付宝当面付是什么&#xff1f;二、如何申请当面付接口1.登录 支付宝商家中心2.点击“产品中心”&#xff0c;支付产品中选择当面付3.点击“立即开通”4.按步骤填写 三、创建应用及生成公钥和私钥1.登…

tuzicms企业网站系统安装图文教程

TuziCMS&#xff08;简称TC&#xff09;是基于ThinkPHP 框架开发的企业网站内容管理系统&#xff0c;国内PHPMYSQL 开源建站程序&#xff0c;它具有操作简单、功能强大、稳定性好、扩展性强&#xff0c;二次开发及后期维护方便&#xff0c;可以帮您快速构建起一个强大专业的企业…

如何安装配置TuziCMS网站程序模板

如何安装配置TuziCMS网站程序模板 1.登录网站后台 2.进入网站管理后台首页 3.打开“系统设置”-“模板管理” 4.将设计好的模板放置在程序Public目录 电脑模板&#xff1a;Public\Home 手机模板&#xff1a;Public\Mobile 5.安装配置模板 电脑模板默认风格&#xff1a;配置的…

兔子(tuzicms)网站程序及数据库迁移搬家教程

前言&#xff1a;网站的迁移搬家&#xff0c;涉及到两个方面&#xff0c;一是网站程序的迁移&#xff0c;二是网站数据库的迁移。下面以线上网站程序搬家迁移到本地开发环境为例讲解。 一&#xff0e;程序的迁移搬家 1、登录购买的网站服务器 打开服务器管理后台文件管理器&a…

从零开始布置你的个人网站(一)

准备 之前用腾讯云的学生购买了一个1元服务器&#xff0c;但是一直没有用起来&#xff0c;最近项目不太忙&#xff0c;准备自己搭建一个线上环境。 安装ubuntu环境 安装ubuntu的16.04.1的32环境 登录ubuntu系统&#xff0c;可以直接使用腾讯云的登录&#xff0c;也可以通过各…

从零开始部署个人网站(二)--Laravel环境

部署Laravel环境 部署完基本LAMP环境之后&#xff0c;因为我的项目中会使用到Laravel&#xff0c;所以接下来继续搭建Laravel环境。 首先要使用Laravel最好先安装composer。 安装composer ubuntu中安装composer 可以下面两个命令来执行 命令一: curl -sS https://getcompose…

从零开始部署个人网站(三)--数据库和git

线上部署项目 安装完成Laravel后&#xff0c;我们就下来就尝试如何把线上的代码&#xff0c;下载到服务器中。 我们在部署项目的时候&#xff0c;通常都是把代码先放到git&#xff0c;coding&#xff0c;svn或者其他托管服务中&#xff0c;然后在从服务器下将代码下载下来。 …

爬虫+网站开发实例:电影票比价网

注&#xff1a;一篇去年的旧文&#xff0c;发现没在知乎发过&#xff0c;过来补个档。有个小问题是项目中淘票票的网页反爬提升且变动较多&#xff0c;目前暂不可用了。 时常有同学会问我类似的问题&#xff1a;我已经学完了 Python 基础&#xff0c;也照着例子写过一点爬虫代码…

昝辉SEO告诉你:SEO是什么鬼

SEO 是英文search engine optimization的缩写&#xff0c;其中文意思是搜索引擎优化。 而从事这方面工作的就是search engine optimizer&#xff0c;搜索引擎优化师。他们利用工具或者其他的各种手法使自己的网站符合搜索引擎的搜索规则&#xff0c;从而获得较好的排名…

焦大SEO:做SEO怎么快速入门

seo学习必须懂简单程序知识&#xff1a;html/css/js等代码要会使用&#xff0c;作为一个专业的seo专员必须懂得这些代码的使用以便做网站内部布局是找不到头绪&#xff0c;对建站有一定的了解&#xff0c;也就是说一个计算机理科生会非常占有优势&#xff0c;其次一些快捷工具需…

爬取招聘网站数据分析数据,可视化,flume,hive,sqoop,mysql

一、爬取数据 ①qiancheng.py ②pipelines.py ③sitting ④items 二、数据储存 1、把MongoDB数据导出为csv文件 在E:\MongoDB\bin下cmd mongoexport.exe --csv -f _id,name,salary,gongsi,didian,jingyan,xueli,neirong,jineng -d qiancheng -c Table -o Test.csv2、上…

换IP软件带你了解网站的反爬虫策略有哪些

自有网络以来&#xff0c;就一直存在爬虫和反爬虫&#xff0c;越是大网站&#xff0c;越是成熟的网站&#xff0c;其反爬虫机制越完善&#xff0c;最初的IP限制&#xff0c;验证码限制&#xff0c;还有其他的限制&#xff0c;今天小编跟大家一起去了解下网站在哪些地方设置反爬…

Slashdot:技术怪才的新闻网站

你关心CSS吗&#xff1f;Gnome呢&#xff1f;还有GPL&#xff1f;这是一个提供“技术怪才的新闻”的网站Slashdot所热衷谈论的话题。一旦你明白聚集Slashdot周围的人群到底在谈论什么&#xff0c;你也许会一样充满热情地加入进去。 Slashdot是你从来没有访问过的最重要的网站&a…

学习c/c++的50个好网站

来自: 你不躲猫猫(why我所做的看起来像一个笑话) 2010-04-01 10:12:43 1、http://snippets.dzone.com/tag/c/ --数以千计的有用的C语言源代码片段 2、http://www.hotscripts.com/category/c-cpp/scripts-programs/ Hotscripts --提供数以百计的C和C脚本和程序。所有程序都分为…