Python自動(dòng)化之實(shí)現(xiàn)桌面壁紙下載器
隨著計(jì)算機(jī)性能的提升,人們對(duì)計(jì)算機(jī)個(gè)性化的要求也越來(lái)越高了,自己使用的計(jì)算機(jī)當(dāng)然要設(shè)置成自己喜歡的風(fēng)格!
網(wǎng)站上的壁紙分類(lèi)主要有美圖、動(dòng)漫、今日熱圖、壁紙等等類(lèi)型的高清圖片供我們下載。
若是喜歡其中的一些壁紙我們可以手動(dòng)進(jìn)行下載,但是對(duì)于熱衷于python的我們當(dāng)然要實(shí)現(xiàn)懶人操作-自動(dòng)化批量下載。
于是就有了接下來(lái)的這個(gè)批量桌面壁紙下載器,首先將使用到的技術(shù)棧全部列舉出來(lái)供大佬們參考。
- 操作系統(tǒng):windows7
- GUI工具:PyQt5
- 頁(yè)面爬蟲(chóng):requests
- 系統(tǒng)文件操作庫(kù):os
其中第三方的非標(biāo)準(zhǔn)庫(kù)PyQt5、requests需要我們使用pip的方式安裝一下。
pip?install?requests?-i?https://pypi.tuna.tsinghua.edu.cn/simple/ pip?install?PyQt5?-i?https://pypi.tuna.tsinghua.edu.cn/simple/
將代碼塊中需要的相關(guān)python模塊全部導(dǎo)入進(jìn)來(lái)。
#?It's?importing?the?traceback?module. import?traceback #?Importing?all?the?classes?from?the?QtWidgets?module. from?PyQt5.QtWidgets?import?* #?Importing?all?the?classes?from?the?QtCore?module. from?PyQt5.QtCore?import?* #?Importing?all?the?classes?from?the?QtGui?module. from?PyQt5.QtGui?import?* #?It's?importing?the?requests?module. import?requests #?It's?importing?the?os?module. import?os #?It's?importing?the?sys?module. import?sys
完成了上述的準(zhǔn)備工作之后,我們創(chuàng)建一個(gè)python類(lèi)WallPaperUI作為GUI布局相關(guān)的操作,將UI布局或使用到的組件全部放到這個(gè)類(lèi)中來(lái)開(kāi)發(fā)。
class?WallPaperUI(QWidget): ????def?__init__(self): ????????""" ????????A?constructor.?It?is?called?when?an?object?is?created?from?a?class?and?it?allows?the?class?to?initialize?the ????????attributes?of?a?class. ????????""" ????????super(WallPaperUI,?self).__init__() ????????self.init_ui() ????def?init_ui(self): ????????""" ????????This?function?initializes?the?UI. ????????""" ????????self.setWindowTitle('批量桌面壁紙下載器??公眾號(hào):Python 集中營(yíng)') ????????self.setWindowIcon(QIcon('download.ico')) ????????self.resize(500,?200) ????????self.save_dir_path?=?QLineEdit() ????????self.save_dir_path.setPlaceholderText('桌面壁紙保存路徑') ????????self.save_dir_btn?=?QPushButton() ????????self.save_dir_btn.setText('保存路徑') ????????self.save_dir_btn.clicked.connect(self.save_dir_btn_click) ????????self.set_dwonload_num_label?=?QLabel() ????????self.set_dwonload_num_label.setText('設(shè)置下載數(shù)量:') ????????self.set_dwonload_num_in?=?QLineEdit() ????????self.set_dwonload_num_in.setPlaceholderText('例如:10') ????????self.start_btn?=?QPushButton() ????????self.start_btn.setText('立即下載') ????????self.start_btn.clicked.connect(self.start_btn_click) ????????self.brower?=?QTextBrowser() ????????self.brower.setReadOnly(True) ????????self.brower.setFont(QFont('宋體',?8)) ????????self.brower.setPlaceholderText('處理進(jìn)程展示區(qū)域...') ????????self.brower.ensureCursorVisible() ????????hbox?=?QHBoxLayout() ????????left_box?=?QVBoxLayout() ????????left_box.addWidget(self.brower) ????????right_box?=?QVBoxLayout() ????????right_form_box?=?QFormLayout() ????????right_form_box.addRow(self.save_dir_path,?self.save_dir_btn) ????????right_form_box.addRow(self.set_dwonload_num_label,?self.set_dwonload_num_in) ????????right_h_box?=?QHBoxLayout() ????????right_h_box.addWidget(self.start_btn) ????????right_box.addLayout(right_form_box) ????????right_box.addLayout(right_h_box) ????????hbox.addLayout(left_box) ????????hbox.addLayout(right_box) ????????self.download_thread?=?DownloadWork(self) ????????self.download_thread.finished.connect(self.finished) ????????self.download_thread.message.connect(self.show_message) ????????self.setLayout(hbox) ????def?show_message(self,?text): ????????cursor?=?self.brower.textCursor() ????????cursor.movePosition(QTextCursor.End) ????????self.brower.append(text) ????????self.brower.setTextCursor(cursor) ????????self.brower.ensureCursorVisible() ????def?save_dir_btn_click(self): ????????directory?=?QFileDialog.getExistingDirectory(self,?'選擇文件夾',?os.getcwd()) ????????self.save_dir_path.setText(directory) ????def?start_btn_click(self): ????????self.start_btn.setEnabled(False) ????????self.download_thread.start() ????def?finished(self,?finished): ????????if?finished?is?True: ????????????self.start_btn.setEnabled(True)
完成上面的界面組件布局以后GUI界面就出來(lái)了,可以看看界面效果如下。
接下來(lái)可以開(kāi)發(fā)下載壁紙的業(yè)務(wù)過(guò)程了,為了避免影響頁(yè)面主線程的執(zhí)行過(guò)程,我們特意使用QThread的子線程來(lái)開(kāi)發(fā)業(yè)務(wù)過(guò)程。
創(chuàng)建一個(gè)python類(lèi)DownloadWork繼承自QThread子線程。
class?DownloadWork(QThread): ????finished?=?pyqtSignal(bool) ????message?=?pyqtSignal(str) ????def?__init__(self,?parent=None): ????????super(DownloadWork,?self).__init__(parent) ????????self.working?=?True ????????self.parent?=?parent ????def?__del__(self): ????????self.working?=?False ????def?run(self)?->?None: ????????try: ????????????save_dir_path?=?self.parent.save_dir_path.text().strip() ????????????set_dwonload_num_in?=?self.parent.set_dwonload_num_in.text().strip() ????????????self.message.emit('保存路徑:{}'.format(save_dir_path)) ????????????self.message.emit('下載數(shù)量:{}'.format(set_dwonload_num_in)) ????????????if?save_dir_path?==?'': ????????????????self.message.emit('出現(xiàn)錯(cuò)誤:保存路徑不能為空!') ????????????????return ????????????if?set_dwonload_num_in?==?'': ????????????????self.message.emit('出現(xiàn)錯(cuò)誤:下載數(shù)量不能為空!') ????????????????return ????????????for?n?in?range(int(set_dwonload_num_in)): ????????????????pic_url?=?f"http://bingw.jasonzeng.dev?resolution=UHD&index={n}" ????????????????self.message.emit('正在下載第{0}張壁紙!'.format(str(n))) ????????????????with?requests.get(pic_url)?as?r: ????????????????????with?open(os.path.join(save_dir_path,?str(n)?+?'.jpg'),?"wb")?as?w: ????????????????????????w.write(r.content) ????????????self.message.emit('全部壁紙下載完成!') ????????????self.finished.emit(True) ????????except: ????????????traceback.print_exc() ????????????self.message.emit('執(zhí)行錯(cuò)誤,請(qǐng)檢查參數(shù)項(xiàng)是否設(shè)置正確!') ????????????self.finished.emit(True)
至此,在子線程類(lèi)DownloadWork中的壁紙下載業(yè)務(wù)就開(kāi)發(fā)完了。
接下來(lái)使用python模塊的mian函數(shù)調(diào)起整個(gè)應(yīng)用就大功告成了。
#?A?special?variable?in?Python?that?evaluates?to?True?if?the?module?is?being?run?as?the?main?program. if?__name__?==?'__main__': ????app?=?QApplication(sys.argv) ????main?=?WallPaperUI() ????main.show() ????sys.exit(app.exec_())
最后啟動(dòng)應(yīng)用,設(shè)置好文件保存路徑,設(shè)置下載10張桌面壁紙看看效果如何?
到此這篇關(guān)于Python自動(dòng)化之實(shí)現(xiàn)桌面壁紙下載器的文章就介紹到這了,更多相關(guān)Python桌面壁紙下載內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python中requests模塊的請(qǐng)求參數(shù)詳解
這篇文章主要介紹了Python中requests模塊的請(qǐng)求參數(shù)詳解,requests模塊是一個(gè)網(wǎng)絡(luò)請(qǐng)求模塊,可以幫助我們模擬成客戶(hù)端去請(qǐng)求服務(wù)器的數(shù)據(jù),我們今天就是主要針對(duì)這個(gè)模塊進(jìn)行學(xué)習(xí),需要的朋友可以參考下2023-08-08python中列表的切片與修改知識(shí)點(diǎn)總結(jié)
在本篇文章里小編給大家分享了關(guān)于python中列表的切片與修改的相關(guān)知識(shí)點(diǎn)內(nèi)容,需要的朋友們學(xué)習(xí)下。2019-07-07python腳本設(shè)置超時(shí)機(jī)制系統(tǒng)時(shí)間的方法
這篇文章主要介紹了python腳本設(shè)置超時(shí)機(jī)制系統(tǒng)時(shí)間的方法,感興趣的小伙伴們可以參考一下2016-02-02Pytorch之tensorboard無(wú)法啟動(dòng)和顯示問(wèn)題及解決
這篇文章主要介紹了Pytorch之tensorboard無(wú)法啟動(dòng)和顯示問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09Python處理Excel的14個(gè)常用操作總結(jié)
在數(shù)據(jù)處理和分析的領(lǐng)域中,Excel是一種被廣泛使用的工具,然而,通過(guò)Python處理Excel,能夠更好地實(shí)現(xiàn)自動(dòng)化和批量處理,本文為大家整理了14個(gè)Python處理Excel的常用操作,希望對(duì)大家有所幫助2023-12-125道關(guān)于python基礎(chǔ) while循環(huán)練習(xí)題
這篇文章主要給大家分享的是5道關(guān)于python基礎(chǔ) while循環(huán)練習(xí)題,無(wú)論學(xué)習(xí)什么語(yǔ)言,練習(xí)都是必不可少的,下面文章的練習(xí)題挺精湛的,需要的朋友可以參考一下2021-11-11Python使用Selenium爬取淘寶異步加載的數(shù)據(jù)方法
今天小編就為大家分享一篇Python使用Selenium爬取淘寶異步加載的數(shù)據(jù)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12