Python+tkinter實現(xiàn)高清圖片保存
作為愛玩電腦的你是不是也需要經(jīng)常更換一下自己的電腦壁紙呢? 換上一張心儀的圖片整個人都舒暢多了。但是在網(wǎng)上有很多心儀的圖片想要保存下來,如果一張張的去保存那效率又低,而后面的壁紙很有很多好看的又沒有時間去看,這樣就讓我們錯過了很多好看的壁紙,我們從從網(wǎng)站上一個一個下載實在太麻煩。
于是我用Python寫一個保存圖片的功能,把我們的圖片給保存到我們的電腦,這樣就可以瀏覽哪張好看就換哪張,不用再去慢慢保存了。
提示:以下是本篇文章正文內(nèi)容,下面案例可供參考
前言
Python的學(xué)習(xí)先從基礎(chǔ)開始,給自己找任務(wù)多給自己實踐的機會只有實踐才能悟出道理,因為實踐練習(xí)才是學(xué)習(xí)的最好方式。
基本開發(fā)環(huán)境
pycharm
Python 3.8
主要相關(guān)模塊
request,BeautifulSoup,tkinter(Python內(nèi)置庫,直接導(dǎo)入即可)
先看一下(Python+tkinter(圖形化界面設(shè)計))最終效果吧,高清大圖保存到本地電腦了,
(現(xiàn)在只需要在控制臺輸入pyinstaller -F -w 自己的py文件名.py)就可以就能打包成exe放到桌面了。
分析網(wǎng)頁
在爬取之前第一步還是先對網(wǎng)頁進行分析,確定網(wǎng)頁是靜態(tài)的還是動態(tài)的,知己知彼才好下手,是吧!以避開爬取難點,節(jié)約時間。
我們打開網(wǎng)頁右鍵檢查輸入關(guān)鍵字發(fā)現(xiàn)可以找到圖片的信息,我們大致可以確定這個網(wǎng)站是靜態(tài)的。那么我們就可以根據(jù)普通的方法對網(wǎng)頁進行抓取。
開始工作
1.1
先是構(gòu)造個偽造頭防止簡單的的反爬,然后對網(wǎng)頁發(fā)起請求,如果我請求的對象得到的狀態(tài)碼是200(成功訪問)那么就返回text文本給我。
1.2
網(wǎng)頁請求成功之后我們就可以在網(wǎng)頁分析圖片存放的位置在哪。
通關(guān)觀察發(fā)現(xiàn),我們要的圖片儲存在標(biāo)簽div class=‘list’下面的ul標(biāo)簽,ul標(biāo)簽下面li全部是我們需要的圖片。位置我們找到了那么接下來就實例化一個soup對象來找到所有的li標(biāo)簽,緊接著循環(huán)每個li標(biāo)簽,獲取li標(biāo)簽里邊標(biāo)簽b獲取圖片的名字,然后再到img標(biāo)簽src這個屬性提取圖片鏈接。
下面代碼演示。
1.3
圖片的名字和圖片的鏈接都有了,接下來就是創(chuàng)建存放位置,因為圖片是二進制數(shù)據(jù),所以以content的方式請求,最后以wb的形式寫入文件夾。
分析網(wǎng)頁我們不難發(fā)現(xiàn)頁面翻頁的規(guī)律,只要循環(huán)一下就能實現(xiàn),頁面翻頁實現(xiàn)翻頁爬取。(想要更多翻頁自己改數(shù)字吧)
index_2.htm
index_3.htm
index_4.htm
最后就是設(shè)置一下tkinter圖形化界面(這里不再過多詳解,可以上博客查看),設(shè)計與程序結(jié)合一下就完成了。
實現(xiàn)
全部代碼
# @Author : 王同學(xué) import requests from bs4 import BeautifulSoup import os import tkinter as tk # GUI import concurrent.futures import threading def get_content(url): headers = {'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'} response = requests.get(url,headers) response.encoding = response.apparent_encoding # 自動轉(zhuǎn)碼 if response.status_code == 200: return response.text def get_data(response): soup = BeautifulSoup(response,'lxml') all_li = soup.find(class_="list").find('ul') for i in all_li.find_all('li'): if i.find('b') is not None: title = i.find('b').text else: title = 'NOT' images = i.find('a').find('img').get('src') save_images(title,images) def save_csv(): pass def save_images(title,images): if not os.path.exists('img'): # 創(chuàng)建文件夾 os.mkdir('img') headers = {'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'} images_data = requests.get(url=images,headers=headers).content with open('img\\' + title + '.jpg', mode='wb')as f: f.write(images_data) print('正在保存===>: ',title) # GUI文本框輸入 qq.insert(tk.INSERT,"正在保存圖片:" + title + '\n') qq.yview_moveto(1) qq.update() def main(): print('===================已經(jīng)點擊按鈕===========================') for i in range(2,11): url = f'http://www.netbian.com/index_{i}.htm' # 循環(huán) qq.insert(tk.INSERT,f'==========================正在保存第{i}頁的圖片=========================='+ '\n') qq.update() print(f'============================正在保存第{i}頁的數(shù)據(jù)內(nèi)容========================') response = get_content(url) get_data(response) qq.insert(tk.INSERT,'=================================保存結(jié)束================================') # 多線程 防止GUI卡死 def process_it(): it = threading.Thread(target=main) it.setDaemon(True) it.start() if __name__ == '__main__': # 設(shè)置GUI圖形界面 windoms = tk.Tk() windoms.iconbitmap() windoms.title('圖片') windoms.geometry('500x500+650+300') # labal text = tk.Label(windoms,text='圖片小程序',font=('華文新魏',20)) text.place(x=170,y=10) # 按鈕 button = tk.Button(windoms,text='開始下載',font=(20),width=30,height=4,fg='Violet',bd=8,command=process_it) # 開始下載 button.place(x=140,y=80) button1 = tk.Button(windoms,text='退出',font=(20),width=30,fg='Violet',height=4,bd=8,command=windoms.quit) # 退出 button1.place(x=140, y=180) # 文本框 qq = tk.Text(windoms,state='normal',bg='light cyan',fg='DeepPink') qq.place(rely=0.6,relheight=0.4) # 顯示窗口 tk.mainloop()
到此這篇關(guān)于Python+tkinter實現(xiàn)高清圖片保存的文章就介紹到這了,更多相關(guān)Python tkinter圖片保存內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Pytorch訓(xùn)練網(wǎng)絡(luò)過程中l(wèi)oss突然變?yōu)?的解決方案
這篇文章主要介紹了Pytorch訓(xùn)練網(wǎng)絡(luò)過程中l(wèi)oss突然變?yōu)?的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-05-05更新pip3與pyttsx3文字語音轉(zhuǎn)換的實現(xiàn)方法
今天小編就為大家分享一篇更新pip3與pyttsx3文字語音轉(zhuǎn)換的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08