1,项目概况
项目名称:
小说在线阅读器
项目需求:
1,根据关键字检索,实现从互联网获取所需链接。
2,对获取的链接进行解析,获取二级链接,获取的链接以文件的形式保存。
3,实现小说在线阅读。
所需技术:
Python基本爬虫,Python tkinter GUI设计
2,项目代码:

from fake_useragent import UserAgent
from bs4 import BeautifulSoup as Bp
import tkinter as tk
import tkinter.messagebox
import requests as req
import re
import os
#弹出窗口提示,说明使用须知。
tkl = tk.Tk()
tkl.title('验证窗口')
tkl.geometry('250x100')
tkinter.messagebox.showinfo(title='使用须知',message='''1,本软件需要连接网络才能够正常使用,使用本软件时请先连接网络!\n2,本软件仅供学习交流使用,请勿私自传播!\n3,鉴于本人水平有限,本软件若有不足之处,望见谅。\n4,在软件获取链接或者解析时请勿操作软件,否则可能会导致软件无响应!''')
tlable = tk.Label(tkl,text='阅读须知后请关闭此窗口!!!',font=('Arial',12))
tlable.pack()
tkl.mainloop()
#创建主窗口
app = tk.Tk()
app.title('小说搜索解析阅读器v1.0')
app.geometry('800x600')lable = tk.Label(app,text='请输入关键字',font=('Arial',12))
lable.pack()
#定义搜索框
search_entry = tk.Entry(app,show=None,width=50)
search_entry.pack()#定义功能函数
def getdata():st.delete(1.0,tk.END)url = 'http://www.biquge.info/modules/article/search.php'#伪装头部ua = UserAgent()header = {'User-Agent':ua.random}key = search_entry.get()#爬取链接try:r = req.post(url,{'searchkey':key},headers=header)except Exception as e:tkinter.messagebox.showinfo(title='警告!',message='获取链接失败,请点击按钮重试!')returnr.raise_for_status()r.encoding = r.apparent_encodingre_list = []soup = Bp(r.text,'html.parser')data = soup.find_all('a')for item in data:try:if re.findall(key,item.text):re_list.append(item.text + ':' + 'http://www.biquge.info' + item['href'])except:continueif not re_list:st.insert('insert','没有发现!')dvar = '-*---------------------*-\n请在下面复制要解析的链接,注意:一次只能解析一条\n' + '\n'.join(re_list)st.insert('insert',dvar)return#定义按钮实现功能
search_button = tk.Button(app,text='获取链接',width=12,height=2,command=getdata)
search_button.pack()lable1 = tk.Label(app,text='链接显示区域',font=('Arial',12))
lable1.pack()st = tk.Text(app,width=80,height=5)
st.pack()lable2 = tk.Label(app,text='请输入链接',font=('Arial',12))
lable2.pack()read_entry = tk.Entry(app,show=None,width=80)
read_entry.pack()
#定以函数,用以实现相关按钮功能
def readlink():url = read_entry.get()try:rd = req.get(url)rd.raise_for_status()rd.encoding = rd.apparent_encodingsoup = Bp(rd.text,'html.parser')readdata = soup.find_all('a')read_re_data = []for item in readdata:try:if 'html' in item['href'] and 'http' not in item['href']:read_re_data.append(url + item['href'])else:continueexcept:continuewith open('read.txt','w') as wfile:wfile.write('\n'.join(read_re_data))wfile.close()except:tkinter.messagebox.showinfo(title='警告', message='发生错误,请重试!')returnread_button = tk.Button(app,text='解析',width=12,height=2,command=readlink)
read_button.pack()
#readapp用于设置阅读窗口
def readapp():readapp = tk.Tk()readapp.title('阅读界面')readapp.geometry('1000x800')lable = tk.Label(readapp,text='阅读界面',font=('Arial',12))lable.pack()if not os.path.exists('read.txt'):tkinter.messagebox.showinfo(title='错误',message='未找到文件!')readapp.destroy()returnwith open('page.tmp','w') as file:file.write('1')file.close()def downd():if not os.path.exists('page.tmp'):tkinter.messagebox.showinfo(title='错误', message='请重试!')rf = open('page.tmp','r')page = int(eval(rf.read()))page += 1rf.close()page_str = str(page)rfs = open('page.tmp','w')rfs.write(page_str)rfs.close()readt.delete(1.0,tk.END)rfile = open('read.txt', 'r')url = rfile.readlines()rfile.close()readr = req.get(url[page][:-1:])readr.raise_for_status()readr.encoding = readr.apparent_encodingsoup = Bp(readr.text, 'html.parser')data = soup.find_all('div', id='content')for item in data:readt.insert('insert', item.text)returndef upd():if not os.path.exists('page.tmp'):tkinter.messagebox.showinfo(title='错误', message='请重试!')rf = open('page.tmp', 'r')page = int(eval(rf.read()))rf.close()if page <= 1:tkinter.messagebox.showinfo(title='错误', message='没有上一章了!')returnpage -= 1page_str = str(page)rfs = open('page.tmp', 'w')rfs.write(page_str)rfs.close()readt.delete(1.0, tk.END)rfile = open('read.txt', 'r')url = rfile.readlines()rfile.close()readr = req.get(url[page][:-1:])readr.raise_for_status()readr.encoding = readr.apparent_encodingsoup = Bp(readr.text, 'html.parser')data = soup.find_all('div', id='content')for item in data:readt.insert('insert', item.text)returnbutton1 = tk.Button(readapp,text='上一章',width=10,height=2,command=upd)button1.pack()button2 = tk.Button(readapp,text='下一章',width=10,height=2,command=downd)button2.pack()readt = tk.Text(readapp, width=120, height=50)rfile = open('read.txt','r')url = rfile.readlines()rfile.close()readr = req.get(url[1][:-1:])readr.raise_for_status()readr.encoding = readr.apparent_encodingsoup = Bp(readr.text,'html.parser')data = soup.find_all('div',id='content')for item in data:readt.insert('insert',item.text)readt.pack()readapp.mainloop()read_button1 = tk.Button(app,text='阅读',width=12,height=2,command=readapp)read_button1.pack()app.mainloop()

3,项目效果:

Python Tkinter 项目实例:小说在线阅读器(爬虫部分已过期)相关推荐

  1. 基于PyQt5和requests的小说在线阅读器(小说爬虫)

    效果: 绝对布局 无章节预加载 在不关闭的情况下再次搜索存在bug 代码: python部分: import sys from PyQt5.QtGui import QIcon from PyQt5. ...

  2. Aardio做的一个小说在线阅读器

    这是一片没有diao用的文章,没有任何技术含量. 看小说,因为太多广告,不过路由器拦截了大部分广告,其实体验也还好,不过还是想着自己做一个在线阅读器. 在线阅读器采用的是web.form.以及jq取文 ...

  3. 基于Android的小说在线阅读器软件APP

    在我国,有很多人在业余时间喜欢看小说,因为小说独特性,可以通过书籍.手机甚至在电脑上进行阅读.当然,根据不同的人阅读的习惯不一样,一部分的喜欢书籍阅读,一部分喜欢在手机上阅读.两者都有其优势,前者不易 ...

  4. UWP_小说在线阅读器:功能要求与技术要求

    注:2017年2月23日正式提上日程 学了WP开发也有一年了,也没做过什么软件的.17年进发UWP,锻炼自己一下.做一个开源的小说阅读器吧. 既然开发一个软件.所以要设计一下吧. 功能要求: 可能要用 ...

  5. python +pyqt 小说下载阅读器 转语音合成 ,基于PyQt5生成图形页面(已打成exe可直接下载使用)

    最近在学习python,写了一款简单的小说下载器,基本功能都已经实现,废话不多说 直接上效果 简单说下功能把 1.支持在线阅读,翻页 键盘快捷键上下(阅读) 左右(翻页).可以导出TXT到本地,默认是 ...

  6. 爬取漫画网址的并生产一个在线阅读器

    文章目录 爬取漫画网址的并生产一个在线阅读器 代码分析 实现代码 爬取漫画网址的并生产一个在线阅读器 代码分析 如果要做一个爬虫的话,一定要会看网页的源代码,看有没有自己想要的数据, http://m ...

  7. python代码阅读器_用Python代码实现的RSS阅读器示例

    玩蛇网python之家这篇文章是关于如何使用Python代码实现RSS阅读器示例,如何用Tkinter等模块方法实现RSS订阅器的编写,参考学习过下面的正试代码后就会明白. 简单的说下RSS阅读器是什 ...

  8. 小说下载阅读器_初始简单版

    小说下载阅读器_初始简单版 相信园子里面的很多人和我一样喜欢阅读小说,下面是这几年用的比较多一点的阅读器,功能相对完整. Windows本地程序/手机 1.http://www.mybook66.co ...

  9. Delphi 10.4.2 轻松实现Android/IOS txt小说电子书阅读器应用APP翻页效果

    Delphi 10.4.2是最新版本的跨平台本机应用开发工具,一套代码可编译到五个操作系统上:iOS.Android.Windows.macOS 和 Linux: 本代码仅仅数十行即可轻松实现Andr ...

  10. asp.net925-小型小说在线阅读网站系统

    项目编号:asp.net925-小型小说在线阅读网站系统 运行环境:VS+SQL 开发工具:VS2010及以上版本 数据库:SQL2008及以上版本 使用技术:HTML+JS+HTML 开发语言:C# ...

最新文章

  1. 技术图文:Numpy 一维数组 VS. Pandas Series
  2. 用javascript模拟分子扩散并思考熵与序
  3. STM32开发 -- PMIC、I2C详解
  4. 领域驱动设计,盒马技术团队这么做
  5. [转载] 什么是istio 官网内容
  6. 数据结构 - 哈希表(用数组+链表实现存储员工信息,添加增删查功能)
  7. oracle 如何创建序列squence
  8. linux学习一个服务(未完)
  9. java常用23,JAVA基础(23)---数组的常用操作
  10. esp8266手机端网络调试助手_esp8266定时控制
  11. 转载关于通过判断浏览器的userAgent,用正则来判断是否是ios和Android客户端
  12. 贪心----最优合并问题
  13. 真深复制python_Python深复制浅复制or深拷贝浅拷贝
  14. php表单附件数据回填,从表单发送文件附件使用phpMailer和PHP
  15. MQL5 中如何调用指标
  16. Spark代码2之Transformation:union,distinct,join
  17. 牛客网力扣算法编程之二十一 | 数组 - 明明的随机数 - Java代码实现
  18. 编程菜鸟到大鸟--代码积累
  19. SpringBoot 使用 Thymeleaf 如何发送带模板的Email邮件
  20. 抖音快手短视频批量去水印采集软件v1.8使用文档

热门文章

  1. 【VS开发】【电子电路技术】VPX技术介绍
  2. db2 java驱动下载_IBM DB2 jdbc驱动
  3. sysmon安装报错“error getting the evt dll (wevtapi.dll): 87”解决办法
  4. cad立面索引符号 规范_园林景观设计规范——园林人都该知道!
  5. 毕业论文中含有Java需要哪些参考文献_Java毕业论文参考文献
  6. MCMC采样算法理解
  7. matlab导出prn文件怎么打开,prn文件怎么打开?prn是什么意思?
  8. imx226_【索尼IMX136LQJ-C、IMX236LQJ-C、IMX226CQJ-C、IMX274LQC-C、】价格_厂家 - 中国供应商...
  9. html新浪微博页面练习,js实现新浪微博首页效果
  10. 【预测模型】基于蝙蝠算法改进SVM实现预测matlab源码