Python实战之小说下载神器(完结)今天教你如何白拿一款代码版资源丰富的小说下载器GUI界面编程,海量资源免费看~(追书必备神器)
前言
這次的是一個系列內(nèi)容 給大家講解一下何一步一步實現(xiàn)一個完整的實戰(zhàn)項目案例系列之 小說下載神器(完結(jié))(GUI界面化程序) 小說的搜索功能、小說下載器的GUI界面愛看小伙伴想要一款資源豐富,好用的看小說的軟件。
所以為大家做了一款Python版的小程序,這個系列內(nèi)容已經(jīng)到尾聲了,上一期爬了小說排行榜
的所有小說內(nèi)容采集,這一期的話終于到最后的階段啦~
這一期的代碼有點兒多,本來是分為兩個內(nèi)容文章的,想了下閱讀量不行還是一次性寫了吧,
下一期可以開點兒其他新鮮內(nèi)容蠻~
本期主要內(nèi)容:Python代碼實現(xiàn)小說的搜索功能、小說下載器的GUI界面。
所有文章完整的素材+源碼都在👇👇
粉絲白嫖源碼福利,請移步至CSDN社區(qū)或文末公眾hao即可免費。
正文
一、實現(xiàn)小說的搜索功能
1)導(dǎo)入模塊
# 導(dǎo)入數(shù)據(jù)請求模塊 --> 第三方模塊, 需要安裝 import requests # 導(dǎo)入正則表達式模塊 --> 內(nèi)置模塊, 不需要安裝 import re # 導(dǎo)入數(shù)據(jù)解析模塊 --> 第三方模塊, 需要安裝 import parsel # 導(dǎo)入文件操作模塊 --> 內(nèi)置模塊, 不需要安裝 import os # 導(dǎo)入漂亮的表格 import prettytable as pt2)主程序
ef get_response(html_url):"""發(fā)送請求函數(shù):param html_url: 請求鏈接:return: response響應(yīng)對象"""# 模擬瀏覽器 headers 請求頭headers = {# user-agent 用戶代理 表示瀏覽器基本身份信息'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'}response = requests.get(url=html_url, headers=headers)return responsedef get_list_url(html_url):"""獲取章節(jié)url/小說名:param html_url: 小說目錄頁:return:"""# 調(diào)用發(fā)送請求函數(shù)html_data = get_response(html_url).text# 提取小說名字name = re.findall('<h1>(.*?)</h1>', html_data)[0]# 提取章節(jié)urlurl_list = re.findall('<dd> <a style="" href="(.*?)">', html_data)return name, url_listdef get_content(html_url):"""獲取小說內(nèi)容/小說標題:param html_url: 小說章節(jié)url:return:"""# 調(diào)用發(fā)送請求函數(shù)html_data = get_response(html_url).text# 提取標題title = re.findall('<h1>(.*?)</h1>', html_data)[0]# 提取內(nèi)容content = re.findall('<div id="content">(.*?)<p>', html_data, re.S)[0].replace('<br/><br/>', '\n')return title, contentdef save(name, title, content):"""保存數(shù)據(jù)函數(shù):param name: 小說名:param title: 章節(jié)名:param content: 內(nèi)容:return:"""# 自動創(chuàng)建一個文件夾file = f'{name}\\'if not os.path.exists(file):os.mkdir(file)with open(file + name + '.txt', mode='a', encoding='utf-8') as f:"""第一章 標題小說內(nèi)容第二章 標題小說內(nèi)容"""# 寫入內(nèi)容f.write(title)f.write('\n')f.write(content)f.write('\n')print(title, '已經(jīng)保存')def get_novel_id(html_url):"""獲取小說ID:param html_url: 某分類的鏈接:return:"""# 調(diào)用發(fā)送請求函數(shù)novel_data = get_response(html_url=html_url).textselector = parsel.Selector(novel_data)href = selector.css('.l .s2 a::attr(href)').getall()href = [i.replace('/', '') for i in href]return hrefdef search(word):"""搜索功能:param word: 書名/作者:return:"""search_url = f'https://www.biqudu.net/searchbook.php?keyword={word}'# 發(fā)送請求search_data = get_response(html_url=search_url).text# 解析數(shù)據(jù), 提取小說名字/作者/小說IDselector = parsel.Selector(search_data)lis = selector.css('.novelslist2 li')novel_info = []tb = pt.PrettyTable()tb.field_names = ['序號', '書名', '作者', '書ID']num = 0for li in lis[1:]:# 小說名字name = li.css('.s2 a::text').get()novel_id = li.css('.s2 a::attr(href)').get().replace('/', '')writer = li.css('.s4::text').get()dit = {'name': name,'writer': writer,'novel_id': novel_id,}tb.add_row([num, name, writer, novel_id])num += 1novel_info.append(dit)print('你搜索的結(jié)果如下:')print(tb)novel_num = input('請輸入你想要下載的小說序號: ')novel_id = novel_info[int(novel_num)]['novel_id']return novel_iddef main(word):"""主函數(shù)"""novel_id = search(word)novel_url = f'https://www.biqudu.net/{novel_id}/'name, url_list = get_list_url(html_url=novel_url)print(name, url_list)for url in url_list:index_url = 'https://www.biqudu.net' + urltitle, content = get_content(html_url=index_url)save(name, title, content)if __name__ == '__main__':word = input('請輸入你搜索小說名: ')main(word)3)效果展示
輸入小說名——
?
小說下載中——
?
?
?二、小說下載器的GUI界面
1)主程序
import tkinter as tk from tkinter import ttkdef show():name = name_va.get()print('輸入的名字是:', name)def download():name = num_va.get()print('輸入的序號:', name)# 創(chuàng)建界面 root = tk.Tk() # 設(shè)置標題 root.title('小說下載器') # 設(shè)置界面大小 root.geometry('500x500+200+200') # 設(shè)置可變變量 name_va = tk.StringVar() # 設(shè)置標簽 search_frame = tk.Frame(root) search_frame.pack(pady=10) # 設(shè)置文本 tk.Label(search_frame, text='書名 作者', font=('微軟雅黑', 15)).pack(side=tk.LEFT, padx=10) # 設(shè)置輸入框 tk.Entry(search_frame, relief='flat', textvariable=name_va).pack(side=tk.LEFT)# 序號獲取 num_va = tk.StringVar() # 查詢下載輸入框 download_frame = tk.Frame(root) download_frame.pack(pady=10) # 設(shè)置文本 tk.Label(download_frame, text='小說 序號', font=('微軟雅黑', 15)).pack(side=tk.LEFT, padx=10) # 設(shè)置輸入框 tk.Entry(download_frame, relief='flat', textvariable=num_va).pack(side=tk.LEFT)# 按鈕設(shè)置 button_frame = tk.Frame(root) button_frame.pack(pady=10)# 設(shè)置查詢按鈕 tk.Button(button_frame, text='查詢', font=('微軟雅黑', 10), relief='flat', bg='#88e2d6', width=10, command=show).pack(side=tk.LEFT, padx=10) # 設(shè)置下載按鈕 tk.Button(button_frame, text='下載', font=('微軟雅黑', 10), relief='flat', bg='#88e2d6', width=10, command=download).pack(side=tk.LEFT, padx=10)# 提前設(shè)置標簽名字和中文顯示內(nèi)容 columns = ('num', 'writer', 'name', 'novel_id') columns_value = ('序號', '作者', '書名', '書ID') tree_view = ttk.Treeview(root, height=18, show='headings', columns=columns) # 設(shè)置列名 # 設(shè)置列名 tree_view.column('num', width=40, anchor='center') tree_view.column('writer', width=40, anchor='center') tree_view.column('name', width=40, anchor='center') tree_view.column('novel_id', width=40, anchor='center') # 給列名設(shè)置顯示的名字 tree_view.heading('num', text='序號') tree_view.heading('writer', text='作者') tree_view.heading('name', text='書名') tree_view.heading('novel_id', text='書ID') tree_view.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)2)效果展示
?
?
總結(jié)
今天小編終于把小說下載器的內(nèi)容更完了鴨~全網(wǎng)小說免費看,軟件界面簡潔、功能全面,可以
讓大家輕輕松松的遨游書海哦~下一期大家想看我寫什么內(nèi)容啦可評論區(qū)哦!
?完整的素材源碼等:可以滴滴我吖!或者點擊文末hao自取免費拿的哈~
?🔨推薦往期文章——
項目1.0 小說下載神器(GUI界面)系列內(nèi)容
Python實戰(zhàn)之小說下載神器(一)看小說怎么能少了這款寶藏神器呢?全網(wǎng)小說書籍隨便下,隨便看,爆贊(你準備好了嗎?)
項目1.1? 小說下載神器(GUI界面)系列內(nèi)容?
Python實戰(zhàn)之小說下載神器(二)整本小說下載:看小說不用這個程序,我實在替你感到可惜*(小說愛好者必備)
項目1.2??小說下載神器(GUI界面)系列內(nèi)容?
Python實戰(zhàn)之小說下載神器(三)排行榜所有小說:最全熱門小說合集,總有一款適合你,好多好多好多超贊的小說...(源碼分享學習)
🎁文章匯總——
Python文章合集 | (入門到實戰(zhàn)、游戲、Turtle、案例等)
(文章匯總還有更多你案例等你來學習啦~源碼找我即可免費!) ??
總結(jié)
以上是生活随笔為你收集整理的Python实战之小说下载神器(完结)今天教你如何白拿一款代码版资源丰富的小说下载器GUI界面编程,海量资源免费看~(追书必备神器)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Plupload 上传详细讲解,Plup
- 下一篇: 关于Typecho的主题魔改记录