【开源】 Bing 壁纸数据爬虫和文档生成

date
Aug 30, 2025
AI 摘要
slug
bing-wallpaper-data-scraper-and-doc-generator
status
Published
tags
open-source
summary
因为平时使用 bing 搜索比较多,都知道必应(Bing)首页,每日会更换精美的壁纸,然后想着是否可以写一个数据爬取程序,保存每日的壁纸,并用网站来呈现。 下面将进行总结一下,通过必应的非官方 API 以编程方式访问每日壁纸,构建一个强大的 Python 爬虫来下载图片和元数据,并利用 GitHub Actions 完全免费地自动化整个流程。 可以查看项目开源地址,以及 Bing 壁纸网站。 1、壁纸数据爬取项目github地址 2、最终可以在 Bing 壁纸 这个网站上查看
type
Post
因为平时使用 bing 搜索比较多,都知道必应(Bing)首页,每日会更换精美的壁纸,然后想着是否可以写一个数据爬取程序,保存每日的壁纸,并用网站来呈现。
正好之前使用 kiro 可以试用的时候,通过不断对话交互,一方面可以试一下 kiro 的交互使用,另一方面简单实现了一个 bing 壁纸数据爬取的程序。
下面将进行总结一下,通过必应的非官方 API 以编程方式访问每日壁纸,构建一个强大的 Python 爬虫来下载图片和元数据,并利用 GitHub Actions 完全免费地自动化整个流程。
可以查看项目开源地址,以及 Bing 壁纸网站。
1、壁纸数据爬取项目Github地址
2、最终可以在 Bing 壁纸 这个网站上查看
notion image

项目:壁纸档案馆

在深入技术细节之前,先看下这个项目最终实现了什么。它不是一个简单的脚本,而是一个全自动、自维护的生态系统:
  • 全球覆盖:自动抓取包括中国、美国、日本等 34个国家和地区 的每日壁纸数据。
  • 每日自动更新:通过 GitHub Actions ,整个流程(抓取、下载、生成文档、提交代码)每天自动运行,无需任何人工干预。
  • 数据完整性:保存完整的壁纸元数据,包括标题、版权信息、描述等
  • 超清画质:智能下载每张壁纸的 UHD(超高清) 版本,确保最佳视觉体验。
  • 智能管理:通过MD5哈希值进行 增量下载和自动去重,避免存储空间浪费。
  • 自动化文档:为每个国家生成 精美的Markdown文档,包含今日壁纸、最近30天预览和按年月归档的完整历史记录。
项目生成的文档会像这样每日更新,展示精美的今日壁纸

分析:壁纸 API 深度解析

虽然 Bing 从未公开过 API 接口,但是可以通过搜索,监测到访问 bing 首页的时候隐形调用的 api 接口。
驱动必应壁纸功能的核心是一个非官方的 HTTP GET 接口:https://www.bing.com/HPImageArchive.aspx 。尽管微软并未提供关于此接口的官方文档,但其稳定的结构和在众多开源项目中的广泛应用,使其成为一个相当可靠的数据来源 。
该接口通过 format 参数控制返回数据的格式。对于开发者而言,最友好的选项是 format=js,因为它会返回一个结构清晰的 JSON 对象 。

数据爬取:Bing 壁纸数据抓取脚本

项目的强大功能由crawl/目录下的几个核心Python脚本驱动,它们各司其职,又紧密协作。

1. bing_data.py - 数据抓取脚本

这是所有工作的起点。它负责调用Bing的官方API,获取壁纸的元数据。
  • 工作原理:脚本会遍历一个包含34个国家代码的列表,向Bing API发送请求,获取每个国家当天的壁纸JSON数据。
  • 智能更新:它会将最新的数据 增量添加 到对应国家的 jsonc/{country}/bing.jsonc 文件中,并保持时间倒序,确保数据不重复、不丢失。

2. download_wallpapers_action.py - 壁纸下载脚本

获取元数据后,就轮到下载图片了。这个脚本的亮点在于其“智能”。
  • 构建UHD链接:它会从JSON数据中的 urlbase 字段构建出真正的超高清壁纸下载链接,格式通常是 https://www.bing.com{urlbase}_UHD.jpg
  • MD5指纹:下载图片后,脚本会计算文件的MD5哈希值。这个哈希值有两个妙用:
      1. 作为文件名:将图片重命名为 {md5}.jpg,天然避免了重名问题。
      1. 作为下载凭证:将MD5值写回JSON数据中。下次运行时,脚本只需检查JSON项中是否存在 md5 字段,就能知道这张图片是否已下载,从而实现 增量下载
  • 自动去重:在下载前,脚本还会检查目标文件是否已存在,进一步确保了不会下载重复的图片。

3. generate_markdown.py & generate_readme.py - 文档生成器

将爬取的Bing壁纸数据转化为了美观、易于浏览的网页。
  • 数据驱动:脚本读取 jsonc/ 中的数据和 images/ 中的图片,动态生成每个国家的Markdown文档。
  • 丰富功能:生成的文档包含“今日壁纸”大图展示、“最近30天”响应式网格布局以及“按年份归档”的导航按钮,用户体验极佳。
  • 模板化generate_readme.py 使用 templates/ 目录下的模板文件来生成项目主页的README.md,做到了内容与样式的分离。

自动化:使用GitHub Actions每日自动执行

只需在 .github/workflows/python-app.yml 文件中进行简单配置,就能让所有任务自动执行。
这段配置定义了一个在每天特定时间(UTC 23:01)自动运行的任务。它会依次执行我们上面介绍的四个核心脚本,最后自动将所有更新(新的JSON数据、新的图片、新的Markdown文档)提交回GitHub仓库。整个过程完全自动化
 
对了,之前有详细总结过 Github Action 的有关使用,具体可以参考之前的文章:

© CodeXun 2025