查看原文
其他

Python脚本打包下载必应壁纸2009-2022.02

carry麦 码农真经 2023-12-25
最近我似乎对必应壁纸有执念...
前两周文章:你心心念念的必应壁纸,可以一键打包下载了...
分享了一个实用的Python脚本,并打包了2012-2021年壁纸,方便大家下载。
但随后我就想,壁纸全不全?2012年以前的有没有啊?
于是找啊找,功夫不负有心人,又找到一个不错的源。
有图必应 | 必应壁纸 -探索更多精彩  https://bing.wilii.cn/index.html
这个网站从2009年就开始收集必应壁纸,我写了个脚本,把2009~2011年壁纸下载下来。
所以,今天给大家打包了2009~2022年2月的壁纸,下载附文末。
并且提供一个实时更新仓库,方便你随时下载。
http://chfs3.chenyanggao.top:49414/#/%F0%9F%96%BC%EF%B8%8FBing%E5%A3%81%E7%BA%B8

脚本与使用方法


bing_will.py
#!/usr/bin/env python3# coding: utf-8
__author__ = 'ChenyangGao <https://chenyanggao.github.io/>'__version__ = (0, 0, 1)
import logging
from functools import partial, update_wrapperfrom json import loadsfrom os import path, removefrom shutil import copyfileobjfrom urllib.parse import urlencode, urlparsefrom urllib.request import urlopen, Request

logging.basicConfig( level=logging.INFO, format="[\x1b[1m%(asctime)-15s\x1b[0m] \x1b[36;1m%(name)s\x1b[0m" "(\x1b[31;1m%(levelname)s\x1b[0m) ➜ %(message)s")

def retry(fn=None, times=5, exceptions=Exception): if fn is None: return partial(retry, times=times, exceptions=exceptions) def wrapper(*args, **kwds): excs = [] for _ in range(times): try: return fn(*args, **kwds) except exceptions as e: excs.append(e) raise Exception(excs) return update_wrapper(wrapper, fn)

@retrydef get_json(url, params=None): if params: url = url + '?' + urlencode(params) with urlopen(url) as resp: return loads(resp.read())

@retrydef download(req, filename=None, **kwds): with urlopen(req, **kwds) as resp: if filename is None: hdr_cd = resp.headers.get('Content-Disposition') if hdr_cd and hdr_cd.startswith('attachment; filename='): filename = hdr_cd[21:] else: url = req.full_url if isinstance(req, Request) else req filename = urlparse(url).path.rsplit('/', 1)[-1] try: copyfileobj(resp, open(filename, 'wb')) except: remove(filename) raise

def wilii_page( pagenumber=1, pagesize=12, dictType='DayList2', query='', **params, ): url = 'https://api.wilii.cn/bing/binglist.ashx' params = { 'pagenumber': pagenumber, 'pagesize': pagesize, 'dictType': dictType, 'query': query, **params, } return get_json(url, params=params)

def wilii_item( id, DictType='Detail', **params, ): url = 'https://api.wilii.cn/bing/binglist.ashx' params = { 'id': id, 'DictType': DictType, **params, } js = get_json(url, params) if js: return js[0]

def download_wilii_item(iteminfo, dir=''): try: yyyy = iteminfo['yyyy'] mm = iteminfo['mm'] dd = iteminfo['dd'] pic_urlpic = iteminfo['pic_urlpic'][1:] if iteminfo['type'] == 0: suffix = '_1920x1080.jpg' elif iteminfo['type'] == 1: suffix = '_1366x768.jpg' else: suffix = '.jpg' except KeyError: logging.error('\x1b[33;1m[信息不足]\x1b[0m %r' % iteminfo) raise name = pic_urlpic + suffix filename = '%s-%s-%s_%s' % (yyyy, mm, dd, name) link = 'https://bing.wilii.cn/OneDrive/bingimages/%s/%s/%s/%s' % (yyyy, mm, dd, name) try: download(link, path.join(dir, filename)) logging.info('\x1b[32;1m[成功]\x1b[0m %s' % link) except Exception: logging.error('\x1b[33;1m[失败]\x1b[0m %s' % link) raise

if __name__ == '__main__': from argparse import ArgumentParser from concurrent.futures import ThreadPoolExecutor
ap = ArgumentParser(description='采集 https://bing.wilii.cn 上的必应壁纸') ap.add_argument('-a', '--begin', type=int, default=1, help='开始页,默认是 1') ap.add_argument('-z', '--end', type=int, default=1 << 100, help='结束页,默认是最后一页') ap.add_argument('-s', '--save-dir', dest='save_dir', default='', help='保存在这个文件夹')
args = ap.parse_args()
save_dir = args.save_dir if save_dir not in ('', '.'): from os import makedirs makedirs(save_dir, exist_ok=True)
begin = args.begin end = args.end
with ThreadPoolExecutor() as exe: for i in range(begin, end + 1): ls = wilii_page(i)['list'] if not ls: break for item in ls: exe.submit(download_wilii_item, item, save_dir)
使用方法
python .\bing_wilii.py -husage: bing_wilii.py [-h] [-a BEGIN] [-z END] [-s SAVE_DIR]
采集 https://bing.wilii.cn 上的必应壁纸
optional arguments: -h, --help show this help message and exit -a BEGIN, --begin BEGIN 开始页,默认是 1 -z END, --end END 结束页,默认是最后一页 -s SAVE_DIR, --save-dir SAVE_DIR 保存在这个文件夹
如下图,下载第1-2页壁纸,存放于当前目录:

壁纸欣赏



点赞、转发、广告,更多优质资源等你来...
(必应壁纸)

往期推荐

图灵600+

【重磅推荐】一位极客的图书馆

Python脚本批量下载创世纪图书馆电子书

百度网盘批量转存.py

利用异常实现越级return(Python实现)

继续滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存