生活随笔
收集整理的這篇文章主要介紹了
Python Tkinter 项目实例:小说在线阅读器(爬虫部分已过期)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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
()
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 项目实例:小说在线阅读器(爬虫部分已过期)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。