Home >Backend Development >Python Tutorial >Entry-Level Bing Wallpaper Scraper
Analysis of Bing wallpaper web elements and API
To create an automated wallpaper downloader using Bing, we need to understand how to interact with the Bing API. The goal is to fetch wallpaper URLs and save them locally in the desired format. We'll also explore the relevant API, image elements, and URL patterns.
1. Bing's Wallpaper API:
Bing provides an endpoint to access its wallpaper metadata, including image URLs, titles, and descriptions. The primary endpoint we use is:
https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=en-US
2. Image URL and Download:
The image URLs provided by the API are often in a relative format (starting with /th?id=...). To download the image, we'll need to prepend the base URL https://www.bing.com.
The image URL will often be in the form:
/th?id=OHR.SouthPadre_ZH-CN8788572569_1920x1080.jpg
We will process this to extract the necessary information, such as the image name and file extension, and save it accordingly.
1. Fetching Data from Bing API:
The first step is to send a GET request to the Bing API. This returns a JSON object containing the metadata of the wallpaper for a given day.
import requests import os # Simulate browser request headers headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36" } # Directory to save wallpapers default_pictures_dir = os.path.join(os.path.expanduser("~"), "Pictures") picture_path = os.path.join(default_pictures_dir, "bing") # Create the directory if it doesn't exist if not os.path.exists(picture_path): os.makedirs(picture_path) # Fetch wallpapers (last 4 days including today) for idx in range(4): # Request Bing's wallpaper metadata api_url = f"https://www.bing.com/HPImageArchive.aspx?format=js&idx={idx}&n=1&mkt=en-US" response = requests.get(api_url, headers=headers) if response.status_code != 200: print(f"Failed to fetch data for idx={idx}, skipping.") continue data = response.json() if not data.get("images"): print(f"No images found for idx={idx}, skipping.") continue # Extract image details image_info = data["images"][0] image_url = "https://www.bing.com" + image_info["url"] image_name = image_info["urlbase"].split("/")[-1] + ".jpg" save_path = os.path.join(picture_path, image_name) # Download the image image_response = requests.get(image_url, headers=headers) if image_response.status_code == 200: with open(save_path, "wb") as f: f.write(image_response.content) print(f"Downloaded: {save_path}") else: print(f"Failed to download image for idx={idx}.")
Online Test
python3 -c "$(curl -fsSL https://ghproxy.com/https://raw.githubusercontent.com/Excalibra/scripts/refs/heads/main/d-python/get_bing_wallpapers.py)"
The above is the detailed content of Entry-Level Bing Wallpaper Scraper. For more information, please follow other related articles on the PHP Chinese website!