Python+tkinter實(shí)現(xiàn)高清圖片保存
作為愛玩電腦的你是不是也需要經(jīng)常更換一下自己的電腦壁紙呢? 換上一張心儀的圖片整個(gè)人都舒暢多了。但是在網(wǎng)上有很多心儀的圖片想要保存下來(lái),如果一張張的去保存那效率又低,而后面的壁紙很有很多好看的又沒有時(shí)間去看,這樣就讓我們錯(cuò)過了很多好看的壁紙,我們從從網(wǎng)站上一個(gè)一個(gè)下載實(shí)在太麻煩。

于是我用Python寫一個(gè)保存圖片的功能,把我們的圖片給保存到我們的電腦,這樣就可以瀏覽哪張好看就換哪張,不用再去慢慢保存了。

提示:以下是本篇文章正文內(nèi)容,下面案例可供參考
前言
Python的學(xué)習(xí)先從基礎(chǔ)開始,給自己找任務(wù)多給自己實(shí)踐的機(jī)會(huì)只有實(shí)踐才能悟出道理,因?yàn)閷?shí)踐練習(xí)才是學(xué)習(xí)的最好方式。
基本開發(fā)環(huán)境
pycharm
Python 3.8
主要相關(guān)模塊
request,BeautifulSoup,tkinter(Python內(nèi)置庫(kù),直接導(dǎo)入即可)
先看一下(Python+tkinter(圖形化界面設(shè)計(jì)))最終效果吧,高清大圖保存到本地電腦了,
(現(xiàn)在只需要在控制臺(tái)輸入pyinstaller -F -w 自己的py文件名.py)就可以就能打包成exe放到桌面了。


分析網(wǎng)頁(yè)
在爬取之前第一步還是先對(duì)網(wǎng)頁(yè)進(jìn)行分析,確定網(wǎng)頁(yè)是靜態(tài)的還是動(dòng)態(tài)的,知己知彼才好下手,是吧!以避開爬取難點(diǎn),節(jié)約時(shí)間。

我們打開網(wǎng)頁(yè)右鍵檢查輸入關(guān)鍵字發(fā)現(xiàn)可以找到圖片的信息,我們大致可以確定這個(gè)網(wǎng)站是靜態(tài)的。那么我們就可以根據(jù)普通的方法對(duì)網(wǎng)頁(yè)進(jìn)行抓取。
開始工作
1.1
先是構(gòu)造個(gè)偽造頭防止簡(jiǎn)單的的反爬,然后對(duì)網(wǎng)頁(yè)發(fā)起請(qǐng)求,如果我請(qǐng)求的對(duì)象得到的狀態(tài)碼是200(成功訪問)那么就返回text文本給我。

1.2
網(wǎng)頁(yè)請(qǐng)求成功之后我們就可以在網(wǎng)頁(yè)分析圖片存放的位置在哪。

通關(guān)觀察發(fā)現(xiàn),我們要的圖片儲(chǔ)存在標(biāo)簽div class=‘list’下面的ul標(biāo)簽,ul標(biāo)簽下面li全部是我們需要的圖片。位置我們找到了那么接下來(lái)就實(shí)例化一個(gè)soup對(duì)象來(lái)找到所有的li標(biāo)簽,緊接著循環(huán)每個(gè)li標(biāo)簽,獲取li標(biāo)簽里邊標(biāo)簽b獲取圖片的名字,然后再到img標(biāo)簽src這個(gè)屬性提取圖片鏈接。

下面代碼演示。

1.3
圖片的名字和圖片的鏈接都有了,接下來(lái)就是創(chuàng)建存放位置,因?yàn)閳D片是二進(jìn)制數(shù)據(jù),所以以content的方式請(qǐng)求,最后以wb的形式寫入文件夾。

分析網(wǎng)頁(yè)我們不難發(fā)現(xiàn)頁(yè)面翻頁(yè)的規(guī)律,只要循環(huán)一下就能實(shí)現(xiàn),頁(yè)面翻頁(yè)實(shí)現(xiàn)翻頁(yè)爬取。(想要更多翻頁(yè)自己改數(shù)字吧)
index_2.htm
index_3.htm
index_4.htm

最后就是設(shè)置一下tkinter圖形化界面(這里不再過多詳解,可以上博客查看),設(shè)計(jì)與程序結(jié)合一下就完成了。

實(shí)現(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 # 自動(dòng)轉(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)點(diǎn)擊按鈕===========================')
for i in range(2,11):
url = f'http://www.netbian.com/index_{i}.htm' # 循環(huán)
qq.insert(tk.INSERT,f'==========================正在保存第{i}頁(yè)的圖片=========================='+ '\n')
qq.update()
print(f'============================正在保存第{i}頁(yè)的數(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實(shí)現(xiàn)高清圖片保存的文章就介紹到這了,更多相關(guān)Python tkinter圖片保存內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Tornado路由與Application的實(shí)現(xiàn)
本文主要介紹了Tornado路由與Application的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05
Python使用切片移動(dòng)元素位置的代碼實(shí)踐
在 Python 中,切片是指從序列類型(如列表、字符串、元組等)中提取子序列的過程,切片可以用來(lái)快速獲取列表的一部分也可以用于反轉(zhuǎn)列表,本文小編給大家介紹了Python使用切片移動(dòng)元素位置的代碼實(shí)踐,需要的朋友可以參考下2024-09-09
在Python中移動(dòng)目錄結(jié)構(gòu)的方法
這篇文章主要介紹了在Python中移動(dòng)目錄結(jié)構(gòu)的方法,需要的朋友可以參考下2016-01-01
python+selenium行為鏈登錄12306(滑動(dòng)驗(yàn)證碼滑塊)
這篇文章主要介紹了python+selenium行為鏈登錄12306,使用python網(wǎng)絡(luò)爬蟲登錄12306,下面小編為大家分享一段代碼,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-02-02
Python實(shí)現(xiàn)刪除重復(fù)視頻文件的方法詳解
這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)刪除重復(fù)視頻文件功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定幫助,需要的可以參考一下2022-10-10
Python Django實(shí)現(xiàn)個(gè)人博客系統(tǒng)的搭建
個(gè)人博客是一個(gè)非常好的平臺(tái),可以讓人們分享自己的知識(shí)和經(jīng)驗(yàn),也可以讓人們交流和互動(dòng)。在這篇文章中,我們將介紹如何使用Python Django框架來(lái)開發(fā)一個(gè)個(gè)人博客系統(tǒng),希望對(duì)大家有所幫助2023-04-04

