編寫Python腳本批量下載DesktopNexus壁紙的教程
DesktopNexus 是我最喜愛(ài)的一個(gè)壁紙下載網(wǎng)站,上面有許多高質(zhì)量的壁紙,幾乎每天必上, 每月也必會(huì)堅(jiān)持分享我這個(gè)月來(lái)收集的壁紙
但是 DesktopNexus 壁紙的下載很麻煩,而且因?yàn)楸诩垥?huì)通過(guò)瀏覽器檢測(cè)你當(dāng)前分辨率來(lái)展示 合適你當(dāng)前分辨率的壁紙,再加上是國(guó)外的網(wǎng)站,速度上很不樂(lè)觀。
于是我寫了個(gè)腳本,檢測(cè)輸入的頁(yè)面中壁紙頁(yè)面的鏈接,然后批量下載到指定文件夾中。
腳本使用 python 寫的,所以需要機(jī)器上安裝有 python 。
用法:
$ python desktop_nexus.py -p http://www.desktopnexus.com/tag/cat/ -s 1280x800 -o wallpapers
-p 包含 DesktopNexus 壁紙鏈接的頁(yè)面,比如我的壁紙分享
-s 壁紙尺寸,可選,缺省為 1440x900
-o 壁紙輸出的文件夾,可選,缺省為當(dāng)前目錄下的 wallpapers, 如果不存在會(huì)自動(dòng)創(chuàng)建
代碼:
#-*- coding: utf-8 -*- from argparse import ArgumentParser import os, re, sys import urllib2, cookielib, urlparse RE_WALLPAPER = r'http\:\/\/[^\/\.]+\.desktopnexus\.com\/wallpaper\/\d+\/' CHUNK_SIZE = 1024 * 3 class DesktopNexus: def __init__(self, page=None, size=None, output_dir=None): self.page = page self.size = size self.output_dir = output_dir def start(self): print 'Making output directory:', self.output_dir if not os.path.exists(self.output_dir): os.makedirs(self.output_dir) # Setup cookie cookie = cookielib.CookieJar() processer = urllib2.HTTPCookieProcessor(cookie) opener = urllib2.build_opener(processer) urllib2.install_opener(opener) self._read_page() def _get_pic_info(self, url): pic_id = url.split('/')[-2] html = urllib2.urlopen(url).read() pattern = r'<a href=\"\/get\/%s\/\?t=(?P<token>.*?)\"' % pic_id match = re.search(pattern, html, flags=re.I|re.M|re.S) if match: return {'id': pic_id, 'token': match.group('token'), 'size': self.size} else: raise Exception('Cound not find wallpaper') def _get_pic_file(self, pic_info): redirect_url = 'http://www.desktopnexus.com/dl/inline/%(id)s/%(size)s/%(token)s' % pic_info request = urllib2.urlopen(redirect_url) return request.geturl() def _download_pic(self, url): pic_info = self._get_pic_info(url) pic_file = self._get_pic_file(pic_info) filename = os.path.split(urlparse.urlparse(pic_file).path)[-1] filename = os.path.join(self.output_dir, filename) with open(filename, 'wb') as output: resp = urllib2.urlopen(pic_file) total_size = int(resp.info().get('Content-Length')) saved_size = 0.0 while saved_size != total_size: chunk = resp.read(CHUNK_SIZE) saved_size += len(chunk) output.write(chunk) self._print_progress('Saving file: %s' % filename, \ saved_size / total_size * 100) def _print_progress(self, msg, progress): sys.stdout.write('%-71s%3d%%\r' \ % (len(msg) <= 70 and msg or msg[:67] + '...', progress)) sys.stdout.flush() if progress >= 100: sys.stdout.write('\n') def _read_page(self): try: print 'Fetching content:', self.page html = urllib2.urlopen(self.page).read() links = set(re.findall(RE_WALLPAPER, html, re.M|re.I)) count = len(links) print 'Downloading wallpapers:' for i, link in enumerate(links): print '[%d/%d]: %s' % (i + 1, count, link) try: self._download_pic(link) except Exception as e: print 'Error downloading wallpaper.', e.message except Exception as e: print 'Error fetching content.', e if __name__ == '__main__': # Setup argparser parser = ArgumentParser('python desktop_nexus.py') parser.add_argument('-p', '--page', dest='page', required=True, \ help='specific a page that includes wallpaper list') parser.add_argument('-s', '--size', dest='size', default='1440x900', \ help='specific the wallpaper size, default to 1440x900') parser.add_argument('-o', '--output', dest='output_dir', default='wallpapers', \ help='specific the output directory, default to "wallpapers"') args = parser.parse_args() dn = DesktopNexus(**args.__dict__) dn.start()
- Python腳本實(shí)現(xiàn)下載合并SAE日志
- Python實(shí)現(xiàn)的飛速中文網(wǎng)小說(shuō)下載腳本
- 編寫Python腳本來(lái)實(shí)現(xiàn)最簡(jiǎn)單的FTP下載的教程
- 利用python寫個(gè)下載teahour音頻的小腳本
- 使用python采集腳本之家電子書資源并自動(dòng)下載到本地的實(shí)例腳本
- Python實(shí)現(xiàn)多線程下載腳本的示例代碼
- 寫一個(gè)Python腳本下載嗶哩嗶哩舞蹈區(qū)的所有視頻
- Python實(shí)現(xiàn)一鍵下載視頻腳本
- Python百度指數(shù)獲取腳本下載并保存
相關(guān)文章
Python動(dòng)態(tài)聲明變量賦值代碼實(shí)例
這篇文章主要介紹了Python動(dòng)態(tài)聲明變量賦值代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12python實(shí)現(xiàn)郵件自動(dòng)發(fā)送
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)郵件自動(dòng)發(fā)送,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08Python?pandas的八個(gè)生命周期總結(jié)
這篇文章主要從八個(gè)pandas的數(shù)據(jù)處理生命周期,整理匯總出pandas框架在整個(gè)數(shù)據(jù)處理過(guò)程中都是如何處理數(shù)據(jù)的,感興趣的小伙伴可以了解一下2022-10-10Python pass語(yǔ)句作用和Python assert斷言函數(shù)的用法
這篇文章主要介紹了Python pass語(yǔ)句作用和Python assert斷言函數(shù)的用法,文章內(nèi)容介紹詳細(xì)具有一定的參考價(jià)值,需要的小伙伴可以參考一下,希望對(duì)你有所幫助2022-03-03Python函數(shù)參數(shù)基礎(chǔ)介紹及示例
在聲明函數(shù)的時(shí)候,一般會(huì)根據(jù)函數(shù)所要實(shí)現(xiàn)的功能來(lái)決定函數(shù)是否需要參數(shù)。在多數(shù)情況下,我們聲明的函數(shù)都會(huì)使用到參數(shù),這篇文章主要介紹了Python函數(shù)參數(shù)2022-08-08Python?matplotlib?seaborn繪圖教程詳解
Seaborn是在matplotlib的基礎(chǔ)上進(jìn)行了更高級(jí)的API封裝,從而使得作圖更加容易,在大多數(shù)情況下使用seaborn就能做出很具有吸引力的圖。本文將詳細(xì)講解如何利用Seaborn繪制圖表,需要的可以參考一下2022-03-03Python輸出漢字字庫(kù)及將文字轉(zhuǎn)換為圖片的方法
這篇文章主要介紹了Python輸出漢字字庫(kù)及將文字轉(zhuǎn)換為圖片的方法,分別用到了codecs模塊和pygame模塊,需要的朋友可以參考下2016-06-06