歲月留聲

微软 Bing 必应壁纸 4K 超高清壁纸 PHP/Python/EXE爬虫 自动下载

微软 Bing 必应壁纸图片质量挺不错,有个爬取站(必应每日高清壁纸)做得不错,论坛上有个工具批量下载这个站 2016 年 03 月 05 日直至目前所有壁纸(有部分壁纸失效了),分辨率 1920*1080,速度快很方便,图片文件名是对应描述。

「微软 Bing 必应壁纸 4K 超高清壁纸 PHP/Python/EXE爬虫 自动下载:https://0xo.net/188」

微软 Bing 必应壁纸 4K 超高清壁纸 PHP/Python/EXE爬虫 自动下载 - 第1张图片

更多「高清壁纸」打包下载: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 打开程序,输入文件保存路径和开始爬取页码即可,速度也快,图片文件名是对应描述。缺点是只能选取开始页码,并且无法增量更新。

微软 Bing 必应壁纸 4K 超高清壁纸 PHP/Python/EXE爬虫 自动下载 - 第2张图片

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 必应壁纸 4K 超高清壁纸 PHP/Python/EXE爬虫 自动下载 - 第3张图片

爬虫备用下载:必应壁纸爬虫(bing.ioliu.cn)

2022-10-11 测试,爬虫已经无法正常工作,并且网站旧壁纸也预览不到:

「微软 Bing 必应壁纸 4K 超高清壁纸 PHP/Python/EXE爬虫 自动下载:https://0xo.net/188」

微软 Bing 必应壁纸 4K 超高清壁纸 PHP/Python/EXE爬虫 自动下载 - 第4张图片

必应壁纸打包下载:2016 年 03 月 05 日~2020 年 05 月 22 日(一共 1530 张,390M)

必应(bing.com)每日壁纸官方 API

微软 Bing 必应壁纸 4K 超高清壁纸 PHP/Python/EXE爬虫 自动下载 - 第5张图片

获取必应(bing.com)每日壁纸 json 格式数据:https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=ZH-CN

这里有三个 GET 参数,它们的作用分别是:

实例,将 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 或者更大,缺点是不是以壁纸描述作为文件名称,另外能加上检测是否已经下载会更好。

微软 Bing 必应壁纸 4K 超高清壁纸 PHP/Python/EXE爬虫 自动下载 - 第6张图片

必应默认加载 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 每天自动下载必应壁纸...

退出移动版