基于python简易小说阅读器(一)

实现功能:界面显示小说内容,界面的最下方有按键实现章节切换

  后台需要有小说内容的数据,针对这一块,python的爬虫模块requests可以满足项目需求,前端界面比较简单用python自带的界面模块tkinter即可实现。
  这里先说一下后台的实现,requests模块的安装这里不再赘述,网上一查就有,推荐安装pip模块以后,使用相应的指令下载。
  首先需要下载小说的内容,我们需要得到网页的数据,这里就需要介绍requests模块中的get方法:
  关于requuests模块的get方法,最通常的用法是通过r=request.get(url)构造一个向服务器请求资源的url对象。这个对象是Request库内部生成的。这时候的r返回的是一个包含服务器资源的Response对象。包含从服务器返回的所有的相关资源。相当于此时得到的是一个关于网页的操作句柄。上面用法中的url就是网页的网址,比如我们需要向百度发出请求则url的值是https://www.baidu.com
  既然得到了操作句柄,那接下来就可以得到网页的基本内容了。这时,就要用到text属性了,这个属性可以得到请求网页的内容,以字符串的方式。这里副上其他属性的说明:

import requests
url = 'http://m.26ksw.cc/book/57659/54059141/2.html'
strHtml = requests.get(url)
html = strHtml.text
print(html)

运行代码可以看到

在字符串输出的网页源码中,内容总是在p标签之中, 考虑到这里的网页源码实际上是一大串字符串,所以,要得到小说内容,只需要把p标签中的字符串截取出来就行了。到这,思路基本清晰了,可以把p标签中的字符串分割出来,存入数组/列表中,然后输出数组/列表,就可以看到完整的内容了。 虽然用python基础的字符串分割函数也能实现这个操作,但是,针对网页源码的字符串分割,python有更好用的模块可以实现这个操作,这里使用的是beautifulsoup模块。安装过程这里也不再赘述,建议跟上面安装requests模块一样,用pip指令安装。
  使用beautifulsoup模块的过程与使用requests模块类似,首先是要创建一个beautifulsoup文档对象


接下来就是一直想做的事情了,即分割字符串并取出字符串,塞进容器中。这里要介绍beautifulsoup模块中一个方法——find_all

这个方法参数较多,这里只用到两个参数,分别是name和keyword,name就是标签的名字,比如想得到p标签里的内容,name这个参数在这里的值就是字符p,keyword参数是标签的属性,这里的p标签具体来说,就是class=“content_detail”

import requests
from bs4 import BeautifulSoup
url = 'http://m.26ksw.cc/book/57659/54059141/2.html'
strHtml = requests.get(url)
html = strHtml.text
bf = BeautifulSoup(html,"html.parser")
texts = bf.find_all('p', class_='content_detail')
print(texts[0])

该函数会返回一个包含所有搜索结果的列表,这时,运行代码会发现,输出的元素是

没错了,字符串分割已经完成了,但,这个分割不是纯文字的分割,只是把p标签属性是"content_detail"的字符串整块截取出来了。想要得到纯文字的字符串,就要调用text方法了。即:

import requests
from bs4 import BeautifulSoup
url = 'http://m.26ksw.cc/book/57659/54059141/2.html'
strHtml = requests.get(url)
html = strHtml.text
bf = BeautifulSoup(html,"html.parser")
texts = bf.find_all('p', class_='content_detail')
print(texts[0].text)

如今,得到内容的所有拼图都已经齐备,是时候得到完整的一页小说的内容了

import requests
from bs4 import BeautifulSoup
url = 'http://m.26ksw.cc/book/57659/54059141/2.html'
strHtml = requests.get(url)
html = strHtml.text
bf = BeautifulSoup(html,"html.parser")
texts = bf.find_all('p', class_='content_detail')
lent = len(texts)
for i in range(lent):print(texts[i].text)


得到了一页小说的内容,这时就可以着手实现相邻章节内容的切换了

通过观察当前小说网页源码和小说目录以及对比当前页的网址发现,切换章节的网地址由两部分组成,分别是主网页http://m.26ksw.cc和p标签中属性为Readpage中的字符串。所以,只要将p标签中对应的字符串分割出来,加上主网页的网址,自然就能得到相邻章节的完整网址。然后再通过一样的方法得到下一章小说得内容

import requests
from bs4 import BeautifulSoup
source="http://m.26ksw.cc"
url = 'http://m.26ksw.cc/book/57659/54059141/2.html'
chapter = []
i=1
strHtml = requests.get(url,headers=headers)
html = strHtml.text
bf = BeautifulSoup(html,"html.parser")
texts = bf.find_all('p', class_='content_detail')
print(texts[0].text)
lent = len(texts)
for i in range(lent):print(texts[i].text)
texts = bf.find_all('p',class_='Readpage')
bt = BeautifulSoup(str(texts[0]),"html.parser")
a = bt.find_all("a")
nextchapter=requests.get(source+a[2].get("href"))
content = nextchapter.text
bf_1 = BeautifulSoup(content,"html.parser")
texts = bf_1.find_all('p', class_='content_detail')
lent = len(texts)
for i in range(lent):print(texts[i].text)

  通过上面的代码,其实不难看出,得到p标签中部分章节网址的方法与的到小说内容的方法时一样的,即先把p标签属性为Readpage中的字符串整块分割出来,再通过beautifulsoup模块,操作分割出来的字符串,使用get方法得到对应的字符串。值得一提的是,通过上图的网页源码可以看到,章节切换由三个地址,分别是上一章,目录,和下一章,所以,find_all方法返回的列表有三个元素,分别对应上述三个地址,上面a[2]对应的是列表的第三个元素,即下一章的字符串,通过get方法得到a标签中属性是herf的字符串。
  至此,以及得到了当前页小说得内容以及下一章小说得内容,但是,上述代码运行多几次,可能会得到这样得结果


这是因为通过第三方访问网站得次数太多,网站判断访问为恶意攻击,所以针对访问得IP做出了限制。想要正常访问网站,只需要在requests模块得到网站操作句柄得同时设置浏览器头即可,这样,网站会判断是通过浏览器访问,就不会限制访问了。

import requests
from bs4 import BeautifulSoup
headers = {'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', \'ec-ch-ua':'Google Chrome";v="89", "Chromium";v="89", ";Not A Brand";v="99"','ec-ch-ua-mobile':'?0'
}
source="http://m.26ksw.cc"
url = 'http://m.26ksw.cc/book/57659/54059141/2.html'
chapter = []
i=1
strHtml = requests.get(url,headers=headers)
html = strHtml.text
bf = BeautifulSoup(html,"html.parser")
texts = bf.find_all('p', class_='content_detail')
print(texts[0].text)
lent = len(texts)
for i in range(lent):print(texts[i].text)
texts = bf.find_all('p',class_='Readpage')
bt = BeautifulSoup(str(texts[0]),"html.parser")
a = bt.find_all("a")
nextchapter=requests.get(source+a[2].get("href"))
content = nextchapter.text
bf_1 = BeautifulSoup(content,"html.parser")
texts = bf_1.find_all('p', class_='content_detail')
lent = len(texts)
for i in range(lent):print(texts[i].text)

前端的界面代码编写将在 这里说明

基于python简易小说阅读器(一)相关推荐

  1. 基于python简易小说阅读器(二)

    基于python简易小说阅读器(二)   在基于python简易小说阅读器(一)中,用requests模块和beautifulsoup模块完成了阅读器的后台,实现了下载小说内容的功能,现在用tkint ...

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

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

  3. python写小说阅读器_手把手教你用Python制作简易小说阅读器

    /前言/ 不知从什么时候开始.小说开始掀起了一股浪潮,它让我们平日里的生活不在枯燥乏味,很多我们做不到的事情在小说里都能轻易实现. 今天我们要做的就是一个小说阅读器了,一个可以将你的文章中的字每隔多少 ...

  4. python代码阅读器_还在用别的小说阅读器?今天教你用Python制作简易小说阅读器!...

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

  5. python写小说阅读器_用python实现自己的小说阅读器!

    前一段时间书荒的时候,在喜马拉雅APP发现一个主播播讲的小说-大王饶命.听起来感觉很好笑,挺有意思的,但是只有前200张是免费的,后面就要收费.一章两毛钱,本来是想要买一下,发现说的进度比较慢而且整本 ...

  6. python实现小说阅读器

    目录 简介 实现过程 结语 简介 本文使用python语言开发了一个小说阅读器,通过小说书号抓取全部章数的内容,并保存到计算机上:同时也可以通过阅读器读取相应章数的内容: 预览效果:根据填写的小说书号 ...

  7. python写小说阅读器_用python给自己DIY一款小说阅读器,如此看来,很简单!

    前一段时间书荒的时候,在喜马拉雅APP发现一个主播播讲的小说-大王饶命.听起来感觉很好笑,挺有意思的,但是只有前200张是免费的,后面就要收费.一章两毛钱,本来是想要买一下,发现说的进度比较慢而且整本 ...

  8. 基于Python(Tkinter)实现(图形界面)小说阅读器【100010450】

    计算机网络 Project-小说阅读器 一.概述 本文为 2019 秋计算机网络课程 Socket 编程实验报告,我选择了小说阅读器作为实现对象.本节主要阐述任务要求.项目概述及文章框架. 1.1 任 ...

  9. python 小说-用python给自己做一款小说阅读器过程详解

    前言 前一段时间书荒的时候,在喜马拉雅APP发现一个主播播讲的小说-大王饶命.听起来感觉很好笑,挺有意思的,但是只有前200张是免费的,后面就要收费.一章两毛钱,本来是想要买一下,发现说的进度比较慢而 ...

最新文章

  1. spark_updateStateByKey
  2. 【临实战】CentOS 批量配置
  3. css如何让图片不平铺,css怎么设置图片不平铺
  4. 拓端tecdat|R语言精算学:使用链梯法Chain Ladder和泊松定律模拟和预测未来赔款数据
  5. 大数据Hadoop(一):​​​​​​​Hadoop介绍
  6. Java语言的技术平台:JavaSE、JavaEE和JavaME
  7. 用计算机计算实际利率,教你计算信用卡分期真实利率,算完大吃一惊!
  8. 大数据的核心价值是什么? 本质是什么?
  9. 【统计学笔记】方差分析表和回归分析表的解读
  10. 树莓派开启 wifi 热点
  11. 概率笔记2——古典概型
  12. 关于 国产麒麟系统Qt强制退出应用程序qApp->exit()无效 的解决方法
  13. 知乎热议 | 何恺明 新作 如何?
  14. 聚合数据+新闻头条+数据入库+数据展示
  15. Facebook广告投放:什么是Cloak,Cloak的原理以及主流Cloak程序介绍
  16. 2022年Java秋招面试必看的 | Linux 面试题
  17. 金蝶KIS财务接口使用说明
  18. 51nod快乐排队 1431
  19. 谈一谈Flutter中的共享元素动画Hero
  20. web项目使用maven打jar包方式

热门文章

  1. autojs下载大文件
  2. 图形学(6)多边形的区域填充
  3. 快速采集详情API接口
  4. Star Trek强势来袭 开启元宇宙虚拟与现实的梦幻联动
  5. 云服务器ecs增加带宽,老鸟告诉你云服务器带宽多少合适?
  6. foxmail皮肤_七大改变!Foxmail 6.5新功能体验
  7. 动物识别系统代码python_动物识别专家系统课程设计
  8. cto(cto是什么职位)
  9. 计算机控制系统第二章答案,计算机控制系统习题参考答案--第2章
  10. TCP/IP 1.概述