欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

編寫Python腳本批量下載DesktopNexus壁紙的教程

 更新時(shí)間:2015年05月06日 09:34:07   投稿:goldensun  
這篇文章主要介紹了編寫Python腳本批量下載DesktopNexus壁紙的教程,相較于普通的爬蟲(chóng)抓取,本文的下載壁紙教程還包括了設(shè)置所要下載的分辨率等功能的實(shí)現(xiàn),需要的朋友可以參考下

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()


相關(guān)文章

  • Keras自定義IOU方式

    Keras自定義IOU方式

    這篇文章主要介紹了Keras自定義IOU方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • Python動(dòng)態(tài)聲明變量賦值代碼實(shí)例

    Python動(dòng)態(tài)聲明變量賦值代碼實(shí)例

    這篇文章主要介紹了Python動(dòng)態(tài)聲明變量賦值代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • python實(shí)現(xiàn)郵件自動(dòng)發(fā)送

    python實(shí)現(xiàn)郵件自動(dòng)發(fā)送

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)郵件自動(dòng)發(fā)送,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • Pytorch之卷積層的使用詳解

    Pytorch之卷積層的使用詳解

    今天小編就為大家分享一篇Pytorch之卷積層的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • Python?pandas的八個(gè)生命周期總結(jié)

    Python?pandas的八個(gè)生命周期總結(jié)

    這篇文章主要從八個(gè)pandas的數(shù)據(jù)處理生命周期,整理匯總出pandas框架在整個(gè)數(shù)據(jù)處理過(guò)程中都是如何處理數(shù)據(jù)的,感興趣的小伙伴可以了解一下
    2022-10-10
  • Python pass語(yǔ)句作用和Python assert斷言函數(shù)的用法

    Python pass語(yǔ)句作用和Python assert斷言函數(shù)的用法

    這篇文章主要介紹了Python pass語(yǔ)句作用和Python assert斷言函數(shù)的用法,文章內(nèi)容介紹詳細(xì)具有一定的參考價(jià)值,需要的小伙伴可以參考一下,希望對(duì)你有所幫助
    2022-03-03
  • python中的zip模塊

    python中的zip模塊

    這篇文章主要介紹了zip文件格式是通用的文檔壓縮標(biāo)準(zhǔn),在ziplib模塊中,使用ZipFile類來(lái)操作zip文件,感興趣的朋友參考如下
    2021-08-08
  • Python函數(shù)參數(shù)基礎(chǔ)介紹及示例

    Python函數(shù)參數(shù)基礎(chǔ)介紹及示例

    在聲明函數(shù)的時(shí)候,一般會(huì)根據(jù)函數(shù)所要實(shí)現(xiàn)的功能來(lái)決定函數(shù)是否需要參數(shù)。在多數(shù)情況下,我們聲明的函數(shù)都會(huì)使用到參數(shù),這篇文章主要介紹了Python函數(shù)參數(shù)
    2022-08-08
  • Python?matplotlib?seaborn繪圖教程詳解

    Python?matplotlib?seaborn繪圖教程詳解

    Seaborn是在matplotlib的基礎(chǔ)上進(jìn)行了更高級(jí)的API封裝,從而使得作圖更加容易,在大多數(shù)情況下使用seaborn就能做出很具有吸引力的圖。本文將詳細(xì)講解如何利用Seaborn繪制圖表,需要的可以參考一下
    2022-03-03
  • Python輸出漢字字庫(kù)及將文字轉(zhuǎn)換為圖片的方法

    Python輸出漢字字庫(kù)及將文字轉(zhuǎn)換為圖片的方法

    這篇文章主要介紹了Python輸出漢字字庫(kù)及將文字轉(zhuǎn)換為圖片的方法,分別用到了codecs模塊和pygame模塊,需要的朋友可以參考下
    2016-06-06

最新評(píng)論