微软 Bing 必应壁纸图片质量挺不错,有个爬取站(必应每日高清壁纸)做得不错,论坛上有个工具批量下载这个站 2016 年 03 月 05 日直至目前所有壁纸(有部分壁纸失效了),分辨率 1920*1080,速度快很方便,图片文件名是对应描述。
「微软 Bing 必应壁纸 4K 超高清壁纸 PHP/Python/EXE爬虫 自动下载:https://0xo.net/188」更多「高清壁纸」打包下载:Bing 必应壁纸图片打包下载、4K壁纸、iPhone 壁纸、8K壁纸 或者 Bing Wallpaper 每天自动更换必应壁纸,还可以使用 VPS 每天自动下载必应壁纸...
52pojie 论坛必应壁纸爬虫(bing.ioliu.cn)
爬虫出处:52pojie 论坛 - YFAN
「微软 Bing 必应壁纸 4K 超高清壁纸 PHP/Python/EXE爬虫 自动下载:https://0xo.net/188」爬虫可以爬取 必应每日高清壁纸 2016 年 00 月 05 日直至目前所有壁纸,使用很方便,Windows 打开程序,输入文件保存路径和开始爬取页码即可,速度也快,图片文件名是对应描述。缺点是只能选取开始页码,并且无法增量更新。
2016 年 03 月 05 日~2020 年 08 月 07 日,一共 1606 张壁纸,大小 400M+;2016 年 03 月 05 日~2020 年 05 月 22 日,一共 1530 张壁纸,大小 390M+……
「微软 Bing 必应壁纸 4K 超高清壁纸 PHP/Python/EXE爬虫 自动下载:https://0xo.net/188」爬虫备用下载:必应壁纸爬虫(bing.ioliu.cn)
2022-10-11 测试,爬虫已经无法正常工作,并且网站旧壁纸也预览不到:
「微软 Bing 必应壁纸 4K 超高清壁纸 PHP/Python/EXE爬虫 自动下载:https://0xo.net/188」必应壁纸打包下载:2016 年 03 月 05 日~2020 年 05 月 22 日(一共 1530 张,390M)
必应(bing.com)每日壁纸官方 API
获取必应(bing.com)每日壁纸 json 格式数据:https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=ZH-CN
这里有三个 GET 参数,它们的作用分别是:
- n,必要参数,输出信息的数量。比如 n=1,即为 1 条,以此类推,至多输出 8 条。
- format,非必要。返回结果的格式,不存在或者等于 xml 时,输出为 xml 格式,等于 js 时,输出 json 格式。
- idx,非必要。不存在或者等于 0 时,输出当天的图片,-1 为已经预备用于明天显示的信息,1 则为昨天的图片,以此类推,idx 最多获取到前 16 天的图片信息。
- mkt,非必要,默认根据访问 IP 地址返回所在地区数据,指定 mkt=ZH-CN 返回中国区数据,其它可选地区:EN-US, JA-JP, EN-AU, EN-UK, DE-DE, EN-NZ, EN-CA(区分大小写)。
实例,将 n 设定为 1、format 设定为 js、idx 设定为 1,mkt 设定为 ZH-CN,发出 GET 请求,会得到如下返回数据(json 已做格式化处理):
{
"images": [
{
"startdate": "20210722",
"fullstartdate": "202107221600",
"enddate": "20210723",
"url": "/th?id=OHR.TokyoMetropolis_ZH-CN2580870845_1920x1080.jpg&rf=LaDigue_1920x1080.jpg&pid=hp",
"urlbase": "/th?id=OHR.TokyoMetropolis_ZH-CN2580870845",
"copyright": "东京塔,日本东京都港区 (© Yukinori Hasumi/Getty Images)",
"copyrightlink": "https://www.bing.com/search?q=%E4%B8%9C%E4%BA%AC%E5%A1%94&form=hpcapt&mkt=zh-cn",
"title": "",
"quiz": "/search?q=Bing+homepage+quiz&filters=WQOskey:%22HPQuiz_20210722_TokyoMetropolis%22&FORM=HPQUIZ",
"wp": true,
"hsh": "05f1b0f611aac8f7d41c10f722cd2d38",
"drk": 1,
"top": 1,
"bot": 1,
"hs": []
}
],
"tooltips": {
"loading": "正在加载...",
"previous": "上一个图像",
"next": "下一个图像",
"walle": "此图片不能下载用作壁纸。",
"walls": "下载今日美图。仅限用作桌面壁纸。"
}
}
其中的「images」节点下的「url」值便是我们要获取的图像地址。把它取出来,再加上 Bing 网址前缀「http://cn.bing.com」即组合成了完整的图像地址。比如说上面返回数据的完整图像地址是:
http://cn.bing.com/th?id=OHR.TokyoMetropolis_ZH-CN2580870845_1920x1080.jpg
另外,把 _1920x1080 换成 _UHD(也可以理解为「images」节点下的「urlbase」值拼接 _UHD.jpg)可以得到更高分辨率壁纸,比如 4K,6K,8K……
http://cn.bing.com/th?id=OHR.TokyoMetropolis_ZH-CN2580870845_UHD.jpg
并不一定可以获取到 UHD 壁纸,有时候当天必应壁纸为 MP4 视频时,一般只能获取到常规的 1920x1080 分辨率壁纸。
这个是 PHP/Python/Java 等工具/爬虫 自动下载必应壁纸基础。
附:官方 API 根据访问 IP 地址返回对应地区数据,外国 IP 试过几个指定 cn 方法也获取不到中文数据。
Bing 最高分辨率壁纸 必应 4K 6K 8K UHD 超高清壁纸自动下载保存(Python 脚本)
这是后来找到的爬虫,可以放到 VPS 每天自动爬取,然后保存到 OneDrive。优点是可以爬取到最高分辨率,有些壁纸可能有几 MB,十几 MB 或者更大,缺点是不是以壁纸描述作为文件名称,另外能加上检测是否已经下载会更好。
必应默认加载 1080P 图片作为背景,然而背景的最大分辨率远不止 1080P。经过 60 天的爬虫抓取,获取的图片中最大的超过 8K,平均维持在 4K 水平。
完整代码:
# 用于爬取 Bing 首页背景,获得 UHD+分辨率的图片。
import requests
import re
import time
from PIL import Image
import os
# 使用本机 UA
header = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36"}
html = requests.get('https://cn.bing.com/',
headers=header).text
# 正则表达式寻找图片 URL 并尝试将之更改为高分辨率图片地址
img_id = re.findall(r'.*?background-image:url\((.*?)&.*?', html)
img_fhd = img_id[0]
img_uhd = img_fhd.replace('1920x1080', 'UHD')
img_url = "https://cn.bing.com"+img_uhd
print(img_url)
# 以年月日命名图片,并储存到本地。
name = time.strftime('%Y%m%d')+'.jpg'
img = requests.get(img_url)
with open(name, 'wb') as f:
f.write(img.content)
f.close()
print('Save as', name)
# 获取图片尺寸
path = os.path.join(os.getcwd(), name)
img_file = Image.open(path)
# 异常情况处理,即当天图片不符合要求,一般出现在当天背景为 MP4 的情况下
if(img_file.width < 250):
img_url = "https://cn.bing.com"+img_fhd
img = requests.get(img_url)
with open(name, 'wb') as f:
f.write(img.content)
f.close()
print('Save as', name)
img_file = Image.open(path)
# 通过 ServerChan 发送通知到微信
data = {
'text': 'Bing 首页图片已抓取',
'desp': name+str(img_file.size)
}
requests.post(
'https://sc.ftqq.com/{Key}.send', data=data
)
详细介绍参考原文:Chores · 备份:1387-Bing 最高分辨率图片爬取-Chores
Bing 最高分辨率壁纸 必应 4K 6K 8K UHD 超高清壁纸自动下载保存(PHP)
原代码如下(出处:使用 PHP 抓取 Bing 每日图像并为己所用):
<?php
/**
* php 抓取 bing 每日图片并保存到服务器
* 作者:mengkun (mkblog.cn)
* 日期:2016/12/23
*/
$path = 'temp'; //设置图片缓存文件夹
$filename = date("Ymd") . '.jpg'; //用年月日来命名新的文件名
if (!file_exists($path.'/'. $filename)) //如果文件不存在,则说明今天还没有进行缓存
{
if(!file_exists($path)) //如果目录不存在
{
mkdir($path, 0777); //创建缓存目录
}
$str = file_get_contents('http://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1'); //读取必应 api,获得相应数据
$str = json_decode($str,true);
$imgurl = 'http://cn.bing.com'.$str['images'][0]['url']; //获取图片 url
$img = grabImage($imgurl, $path.'/'.$filename); //读取并保存图片
$handle = fopen("dat.txt", "a"); //用于存放图片信息,如果不需要保存图片的相关信息,可以把下面这些去掉。
if ($handle)
{
$copyright = $str['images'][0]['copyright']; //说明
$startdate = $str['images'][0]['startdate'];
$fullstartdate = $str['images'][0]['fullstartdate'];
$enddate = $str['images'][0]['enddate'];
$urlbase = $str['images'][0]['urlbase'];
$copyrightlink = $str['images'][0]['copyrightlink'];
$quiz = $str['images'][0]['quiz'];
$wp = $str['images'][0]['wp'];
$hsh = $str['images'][0]['hsh'];
$drk = $str['images'][0]['drk'];
$top = $str['images'][0]['top'];
$bot = $str['images'][0]['bot'];
$tempArr = array("imgurl"=>$imgurl,"copyright"=>$copyright, "startdate"=>$startdate,
"fullstartdate"=>$fullstartdate, "enddate"=> $enddate, "urlbase"=>$urlbase,
"copyrightlink"=> $copyrightlink, "quiz"=>$quiz, "wp"=> $wp,
"hsh"=>$hsh,"drk"=>$drk, "top"=> $top, "bot"=> $bot); //将相关信息放进数组中
fwrite($handle, json_encode($tempArr) ."\r\n"); //最终以 json 格式保存在文本文档中
fclose($handle);
}
}
/**
* 远程抓取图片并保存
* @param $url 图片 url
* @param $filename 保存名称和路径
*/
function grabImage($url, $filename = "")
{
if($url == "") return false; //如果 $url 地址为空,直接退出
if ($filename == "") //如果没有指定新的文件名
{
$ext = strrchr($url, "."); //得到 $url 的图片格式
$filename = date("Ymd") . $ext; //用天月面时分秒来命名新的文件名
}
ob_start(); //打开输出
readfile($url); //输出图片文件
$img = ob_get_contents(); //得到浏览器输出
ob_end_clean(); //清除输出并关闭
$size = strlen($img); //得到图片大小
$fp2 = @fopen($filename, "a");
fwrite($fp2, $img); //向当前目录写入图片文件,并重新命名
fclose($fp2);
return $filename; //返回新的文件名
}
博主稍稍改了一下:
<?php
$path = '/root/bing/';//设置图片缓存文件夹
$filename = date("Ymd").'.jpg';//用年月日来命名新的文件名
//文件不存在,表示今天还没有进行缓存 uxtt.com
if ( !file_exists( $path.$filename ) ) {
if( !file_exists( $path ) ) {//目录不存在,创建缓存目录
mkdir( $path, 0644 );
}
$str = file_get_contents( 'http://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=ZH-CN' ); //读取必应 api,获得相应数据
$handle = fopen( $path.'data_origin_'.date("Y").'.txt', "a" );//保存图片信息,原始 json 数据
if ( $handle ){
fwrite( $handle, $str."\r\n" );
fclose( $handle );
}
$str = json_decode( $str, true );
$imgurl = "http://cn.bing.com".$str['images'][0]['url'];//拼接图片 url 默认 1920x1080
$imgurl_UHD = "http://cn.bing.com".$str['images'][0]['urlbase']."_UHD.jpg";//拼接 UHD 高清图片 url
$img = grabImage( $imgurl_UHD, $imgurl, $path.$filename ); //读取并保存图片
$handle = fopen( $path.'data_'.date("Y").'.txt', "a" );//保存图片信息,如果不需要可以把下面这些去掉。
if ( $handle ) {
$tempArr = array(//将相关信息放进数组中
"imgurl" => $imgurl,
"imgurl_UHD" => $imgurl_UHD,
"copyright" => $str['images'][0]['copyright'],//壁纸版权、说明
"startdate" => $str['images'][0]['startdate'],
"fullstartdate" => $str['images'][0]['fullstartdate'],
"enddate" => $str['images'][0]['enddate'],
"urlbase" => $str['images'][0]['urlbase'],
"copyrightlink" => $str['images'][0]['copyrightlink'],
"quiz" => $str['images'][0]['quiz'],
"wp" => $str['images'][0]['wp'],
"hsh" => $str['images'][0]['hsh'],
"drk" => $str['images'][0]['drk'],
"top" => $str['images'][0]['top'],
"bot" => $str['images'][0]['bot']
);
//最终以 json 格式保存,json_encode 不转义斜杠和中文 JSON_UNESCAPED_UNICODE + JSON_UNESCAPED_SLASHES = 320
fwrite( $handle, json_encode( $tempArr, 320 ) ."\r\n" );//PHP 5.4+
fclose( $handle );
}
}
function grabImage ( $url_UHD, $url, $filename = "" ){
if ( ( $url_UHD == "" ) || ( $url == "" ) ){ return false; }//如果 $url 地址为空,直接退出
if ( $filename == "" ){//如果没有指定新的文件名
$ext = strrchr( $url, "." );//得到 $url 的图片格式
$filename = date( "Ymd" ).$ext;//年月日命名新的文件名
}
ob_start();//打开输出
readfile( $url_UHD );//输出 UHD 图片文件
$img = ob_get_contents();//浏览器输出
ob_end_clean();//清除输出并关闭
$size = strlen( $img );//UHD 图片大小
if( $size < 250 ){ //异常情况处理,即当天图片不符合要求,一般出现在当天背景为 MP4 的情况下
ob_start(); //打开输出
readfile( $url ); //输出 1920*1080 图片文件
$img = ob_get_contents();//浏览器输出
ob_end_clean();//清除输出并关闭
$size = strlen( $img );//1920*1080 图片大小
}
$fp2 = @fopen( $filename, "a" );
fwrite( $fp2, $img );//向当前目录写入图片文件,并重新命名
fclose( $fp2 );
return $filename;//返回新的文件名
}
简单使用参考:上面代码保存为 bing-get.php,上传至 VPS /root 目录下,建立壁纸图片和信息存放文件夹,如 bing,权限一般 644 就可以,根据实际修改。然后 ssh 执行 bing-get.php 即可下载当天壁纸和保存 json 信息(上面代码会保存原始 json 和修改过的 json 信息,可根据需要修改删减)。
php /root/bing-get.php
调试好使用 crontab 定时执行 bing-get.php 脚本即可自动下载壁纸:
15 17 * * * /usr/local/php/bin/php /root/bing-get.php > /dev/null 2>&1 &
其他
壁纸壁纸类似应用还有很多,有需要搜索一下就有:比如 php 爬取作为 WordPress 壁纸;Windows 每天自动更换壁纸、群晖 DSM 7 自动更换登录界面背景和用户桌面壁纸为微软必应今日美图……
还有这个网站也支持下载高分辨率 Bing 壁纸,看着不错,想折腾一个,不过写不来……(目前需要会员才能下载原图了)
更多「高清壁纸」打包下载:Bing 必应壁纸图片打包下载、4K壁纸、iPhone 壁纸、8K壁纸 或者 Bing Wallpaper 每天自动更换必应壁纸,还可以使用 VPS 每天自动下载必应壁纸...
任何服务、机场均有跑路风险,大小机场也没有绝对好坏,请注意甄别防范!!备用节点参考:大哥云官网、万城专线官网、飞机云官网、搬瓦工JMS、极客云官网……解压及网盘密码 1024