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

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

更多「高清壁纸」打包下载:Bing 必应壁纸图片打包下载4K壁纸iPhone 壁纸8K壁纸……

52pojie 论坛必应壁纸爬虫(bing.ioliu.cn)

爬虫出处:52pojie 论坛 - YFAN

爬虫可以爬取 必应每日高清壁纸 2016年00月05日直至目前所有壁纸,使用很方便,Windows 打开程序,输入文件保存路径和开始爬取页码即可,速度也快,图片文件名是对应描述。缺点是只能选取开始页码,并且无法增量更新。

2016年03月05日~2020年08月07日,一共1606张壁纸,大小也就 400M+

爬虫备用下载:网盘

必应(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。优点是可以爬取到最高分辨率,有些壁纸可能有十几兆或者更大,缺点是不是以壁纸描述作为文件名称,另外加上检测是否已经下载可能会更好。

必应默认加载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';//用年月日来命名新的文件名
//文件不存在,表示今天还没有进行缓存
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 壁纸;每天自动更换壁纸……

还有这个也网站支持下载高分辨率 Bing 壁纸,看着也不错,想折腾一个,不过好像写不来……

更多「高清壁纸」打包下载:Bing 必应壁纸图片打包下载4K壁纸iPhone 壁纸8K壁纸……

除非注明,垃圾站文章均为网络收集,本文地址 https://cyhour.com/1387/,转载时烦请以链接形式注明原始出处。
声明:我们不销售主机,任何VPS主机均有跑路风险且需定期备份,防止数据丢失。信息以实际为准,评测仅供参考不代表权威!
🍄:Netflix 奈飞 YouTube 合租

2021 年 09 月微软 Bing 必应壁纸图片 共30张 4K UHD 打包下载

微软必应每天都会更新一张高清精美背景图片4K高清壁纸,大多数是风景摄影作品,质量都非常高。老头在 VPS 上 py 脚本每天自动下载微软 Bing 必应壁纸图片,自动上传到 OneDrive,大概是2020年6月份开始自动保存。 更多「高清壁纸」打包下载:Bing 必应壁纸图片打包下载、4K壁纸、iPhone 壁纸、8K壁…

2011 年微软 Bing 必应壁纸图片 共365张 打包下载

微软必应每天都会更新一张高清精美背景图片4K高清壁纸,大多数是风景摄影作品,质量都非常高。老头在 VPS 上 py 脚本每天自动下载微软 Bing 必应壁纸图片,自动上传到 OneDrive,大概是2020年6月份开始自动保存。 更多「高清壁纸」打包下载:Bing 必应壁纸图片打包下载、4K壁纸、iPhone 壁纸、8K…

2014 年微软 Bing 必应壁纸图片 共469张 打包下载

微软必应每天都会更新一张高清精美背景图片4K高清壁纸,大多数是风景摄影作品,质量都非常高。老头在 VPS 上 py 脚本每天自动下载微软 Bing 必应壁纸图片,自动上传到 OneDrive,大概是2020年6月份开始自动保存。 更多「高清壁纸」打包下载:Bing 必应壁纸图片打包下载、4K壁纸、iPhone 壁纸、8K…

2017 年微软 Bing 必应壁纸图片 共361张 打包下载

微软必应每天都会更新一张高清精美背景图片4K高清壁纸,大多数是风景摄影作品,质量都非常高。老头在 VPS 上 py 脚本每天自动下载微软 Bing 必应壁纸图片,自动上传到 OneDrive,大概是2020年6月份开始自动保存。 更多「高清壁纸」打包下载:Bing 必应壁纸图片打包下载、4K壁纸、iPhone 壁纸、8K…

Comments:4

  1. 必应有些壁纸图片还是挺不错。有图片,图片点进去还有介绍。

    2020.08.09 22:06 # 回复
    1楼
  2. 挺喜欢BING壁纸的,但一般用最原始的方法——手动下载~~~
    如果遇到比较忙或是忘了的时候,就会有遗漏了,555

    2020.08.14 08:24 # 回复
    2楼

发表留言

Vultr 送$100,搬瓦工年付最低$49,优惠码 BWH3HYATVBJW,更多推荐VPS信息