栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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


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

import tkinter
win = tkinter.Tk()
frame_1 = tkinter.Frame(win)
frame_1.pack(fill=tkinter.BOTH, expand=tkinter.YES)     #设置容器自动
win.title('带滚动条text控件')
text = tkinter.Text(frame_1,font=('微软雅黑',18))    #设置文本字体种类及大小
text.config(fg="blue")                               #设置文本字体颜色
text.pack(fill=tkinter.BOTH, expand=tkinter.YES)
scroll = tkinter.Scrollbar(text)    #以text组件为父组件创建滚轮组件
scroll.pack(side=tkinter.RIGHT,fill=tkinter.Y)    #将滚轮组件放到父组件的右边,方向顺着Y轴
# 两个控件关联
scroll.config(command=text.yview)
text.config(yscrollcommand=scroll.set)
button_1 = tkinter.Button(text,text="上一章",font=20,compound="bottom",relief=tkinter.GROOVE)
button_2 = tkinter.Button(text,text="下一章",font=20,compound="right",relief=tkinter.GROOVE)
text.insert('end','n')
text.insert('end','                                                                   ')      
text.window_create('end',window=button_1)                                                      #在文本末尾插入button_1
text.insert('end','                                                                   ')
text.window_create('end',window=button_2)
text.insert('end','n')                                                                        #在文本末尾插入button_2
win.mainloop()

  一个带有两个按键加滚动条的界面完成了,因为没有文字内容,所以在文本末尾插入按键,此时按键看起来并不像在末尾,而像是在开头,接下来,就是要把小说内容填充进界面

import tkinter
import requests  # 导入requests包
from bs4 import BeautifulSoup

url = 'http://m.26ksw.cc/book/57659/54059141/2.html'
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'
}

win = tkinter.Tk()
frame_1 = tkinter.Frame(win)
frame_1.pack(fill=tkinter.BOTH, expand=tkinter.YES)
win.title('带滚动条text控件')

text = tkinter.Text(frame_1,font=('微软雅黑',18))    #设置文本字体种类及大小
text.config(fg="blue") 

text.pack(fill=tkinter.BOTH, expand=tkinter.YES)
scroll = tkinter.Scrollbar(text)    #以text组件为父组件创建滚轮组件
scroll.pack(side=tkinter.RIGHT,fill=tkinter.Y)    #将滚轮组件放到父组件的右边,方向顺着Y轴

# 两个控件关联
scroll.config(command=text.yview)
text.config(yscrollcommand=scroll.set)

strHtml = requests.get(url,headers=headers)  
html = strHtml.text          
bf = BeautifulSoup(html,"html.parser")  
texts = bf.find_all('p', class_='content_detail') 
lent = len(texts)                                 
for i in range(lent):
    text.insert(tkinter.INSERT,texts[i].text)       #将小说内容插入文本
button_1 = tkinter.Button(text,text="上一章",font=20,compound="bottom",relief=tkinter.GROOVE)
button_2 = tkinter.Button(text,text="下一章",font=20,compound="right",relief=tkinter.GROOVE)

text.insert('end','n')
text.insert('end','                                                                   ')      
text.window_create('end',window=button_1)                                                      #在文本末尾插入button_1
text.insert('end','                                                                   ')
text.window_create('end',window=button_2)
text.insert('end','n')                                                                        #在文本末尾插入button_2

win.mainloop()

  内容已经放进界面了,最后把基于python简易小说阅读器(一)中获取相邻章节内容的代码与按键连接,实现按键切换章节的功能,这里说一下章节切换的页面处理,简单来说就是,把当前界面的内容删除,获取下一章节内容重新插入界面

import tkinter
import requests  # 导入requests包
from bs4 import BeautifulSoup

global html, win, text, now

def Endbutton():          #创建按键,关联章节切换函数,在文本末尾插入按键
    button_1 = tkinter.Button(text,text="上一章",font=20,relief=tkinter.GROOVE, command = Upchapter)
    button_2 = tkinter.Button(text,text="下一章",font=20,relief=tkinter.GROOVE, command = Downchapter)
    text.insert('end','n')
    text.insert('end','                                                                   ')      
    text.window_create('end',window=button_1)                                                     
    text.insert('end','                                                                   ')
    text.window_create('end',window=button_2)
    text.insert('end','n')  

def getcontent(temp, content):       #抓取本页小说内容
    bf_1 = BeautifulSoup(temp,"html.parser")
    tle = bf_1.find_all('span', class_='title')
    title = tle[0].text.split("n")
    win.title(title[2])
    texts = bf_1.find_all('p', class_='content_detail')
    lent = len(texts)
    for i in range(lent):
        content.insert(tkinter.INSERT,texts[i].text)
    Endbutton()

def delcontent():             #删除界面所有内容,包括按键
   text.delete("1.0","end")

def Upchapter():            #切换到上一章/页
    global html
    global now
    delcontent()
    bf_1 = BeautifulSoup(html,"html.parser")
    texts = bf_1.find_all('p',class_='Readpage')       
    bt = BeautifulSoup(str(texts[0]),"html.parser")
    a = bt.find_all("a")                              
    if now == 'http://m.26ksw.cc/book/57659/51229417.html':        #判断当前页是否为第一页
        strHtml = requests.get(now)  
        html = strHtml.text          
        getcontent(html,text)
        return 
    else :
        now = source+a[0].get("href")
        nextchapter=requests.get(source+a[0].get("href")) 
        content = nextchapter.text
        html = content
    getcontent(content,text)

def Downchapter():             #切换到下一章/页
    global html, now
    delcontent()
    bf_1 = BeautifulSoup(html,"html.parser")
    texts = bf_1.find_all('p',class_='Readpage')        
    bt = BeautifulSoup(str(texts[0]),"html.parser")
    a = bt.find_all("a")                               
    if now == 'http://m.26ksw.cc/book/57659/54111726/2.html':       #判断当前页是否为最后一页
        strHtml = requests.get(now)  
        html = strHtml.text          
        getcontent(html,text)
        return 
    else :
        now = source+a[2].get("href")
        nextchapter=requests.get(source+a[2].get("href")) 
        content = nextchapter.text
        html = content
    getcontent(content,text)

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'
}

now = "http://m.26ksw.cc/book/57659/51229417.html"
source="http://m.26ksw.cc"

win = tkinter.Tk()
 
text = tkinter.Text(win,font=('微软雅黑',18))    #设置文本字体种类及大小
text.config(fg="blue")                               #设置文本字体颜色

scroll = tkinter.Scrollbar(text)    #以text组件为父组件创建滚轮组件
scroll.pack(side=tkinter.RIGHT,fill=tkinter.Y)    #将滚轮组件放到父组件的右边,方向顺着Y轴

# 两个控件关联
scroll.config(command=text.yview)
text.config(yscrollcommand=scroll.set)

strHtml = requests.get(now)  # Get方式获取网页数据
html = strHtml.text          #提取数据中字符串部分
getcontent(html,text)

text.pack(fill=tkinter.BOTH, expand=tkinter.YES)
win.mainloop()

  上面的代码有两个地方要说明一下,第一,在切换章节/页的函数中,会判断当前页是否为第一页或者最后一页,一旦判断当前页是最后一页,点击下一章按钮,内容不会变化,反之,如果当前页是第一页,点击上一章按钮,也是一样;第二,代码开头global关键字定义的全局变量,在函数中不允许被直接修改,若要在函数中修改全局变量的值,则需要先声明变量
  好了,简易的小说阅读器完成了,将这个代码拓展改变一下,配合python的文件操作,可以实现将下载小说内容,保存在文件中的功能。这里推一下这位博客主的博客

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1005128.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号