程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python - 定時自動獲取 Bing 首頁壁紙

編輯:Python

一.引言

Bing 首頁的壁紙好看且每日更新,下面介紹如何使用 python 每日自動獲取壁紙並保存。

二.手動獲取

自動獲取前先介紹下如何手動獲取,主要是了解壁紙的網頁形式。

1.打開開發者模式

可以直接 F12 快捷鍵進入開發模式,在右側欄中找到 s.cn.bing.net 選項

2.打開新的 Tab

雙擊對應位置選擇 open in new Tab

 即可得到完整壁紙,右鍵選擇另存為即可保存至指定位置:

Tips:

這裡獲取的網址連接為:

https://s.cn.bing.net/th?id=OHR.LongsPeak_EN-CN6019073969_1920x1080.jpg&rf=LaDigue_1920x1080.jpg

其中 https://s.cn.bing.net 為前綴,/th?id=OHR.LongsPeak_EN-CN6019073969_1920x1080.jpg&rf=LaDigue_1920x1080.jpg 為圖像後綴,二者拼接即可得到壁紙地址,後續通過 python 爬蟲也是基於該地址獲取壁紙。

三.自動獲取

1.官方API

Bing 官方提供 API 獲取線上網頁壁紙:官方API

https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=zh-CN

 主要有 format、idx、n、mkt 四個參數:

參數含義format返回數據形式 js - json xml - xmlidx截止天數 0-今天 -1 - 截止至明天 1 截止至昨天n返回數量        mkt地區 zh-CN - 國區

測試過程中發現 n 的數量總是返回1。

2.Postman 調用接口

使用 Postman Get Api 查看下接口返回 json 的大致形式,沒有 postman 也不影響後續獲取壁紙,獲取壁紙只需要 python 即可。

可以看到當前壁紙的詳細信息,壁紙對應的地址是:"落基山國家公園的朗斯峰,科羅拉多州 ( Andrew R. Slaton/Tandem Stills + Motion),非常的漂亮。其 images 數組內還包含 url ,該 url 形式為:

 "url": "/th?id=OHR.LongsPeak_ZH-CN5927119555_1920x1080.jpg&rf=LaDigue_1920x1080.jpg&pid=hp"

與我們剛才手動尋找打開的 tab 地址只差前綴 https://s.cn.bing.net:

https://s.cn.bing.net/th?id=OHR.LongsPeak_EN-CN6019073969_1920x1080.jpg&rf=LaDigue_1920x1080.jpg

所以 python 的執行邏輯比較清晰:

A.調用 API 獲取 Json

B.通過 Json 獲取壁紙地址,拼接前綴得到最終壁紙地址

C.將對應 content 生成 jpg 保存至本機

3.Python 實現

#!/usr/bin/python
# -*- coding: utf-8 -*-
import requests
import json
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36",
"Connection": "close",
}
def dumpBingWallpaper():
# 解析 URL
n = 1
idx = 1
url = "https://www.bing.com/HPImageArchive.aspx?format=js&idx={}&n={}".format(idx, n)
res = requests.get(url, headers=headers)
res.encoding = 'utf8'
jsonData = json.loads(res.text)
uri = jsonData['images'][0]['url']
# 獲取圖像地址與信息
img = requests.get("https://s.cn.bing.net/" + uri, headers=headers).content
desc = str(jsonData['images'][0]['copyright']).split(",")[0]
dt = jsonData['images'][0]['startdate']
# 輸出地址
output = '/Users/xudong11/Desktop/{}.jpg'.format(desc + "_" + dt)
out = open(output, 'wb')
out.write(img)
out.close()
if __name__ == "__main__":
dumpBingWallpaper()

通過 copyright 和 startdate 獲取圖像簡介與日期作為輸出圖像的名稱,運行後在指定位置獲取目標壁紙:

Tips:

通過 chorm 開發者工具獲取圖像信息的方法需要引入開發者工具包,有興趣的同學也可以實現:

from selenium import webdriver
options = webdriver.ChromeOptions()
Chrome = webdriver.Chrome(options=options, desired_capabilities=capabilities)
wait = WebDriverWait(Chrome, 5)

4.定時執行

A.定時腳本

首先添加定時 shell 腳本 run.sh,PWD 為 python 所在文件夾目錄:

#!/bin/bash
path=${PWD}
cd $path
python DumpBingPic.py

B.crontab 定時啟動

20 11 * * * 代表每天 11:20 下載 Bing 圖片:

20 11 * * * source ~/.bash_profile && cd ${PWD} && sh run.sh

無需手動運行腳本,每天定時保存 bing 壁紙,非常的奈斯

四.Windows 聚焦

除了 Bing 壁紙,之前也整理過 windows 聚焦的開機壁紙獲取方式,並最終生成 .exe 的可執行文件,windows 的同學有興趣也可以繼續參考:Python 提取Windos聚焦的登陸圖片,運行 exe 即可獲取最近 windows 聚焦的開機壁紙:


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved