点到为止——Bing每日推荐
不常用bing, 今天偶然发现首页背景变成视频了.
想着这视频当壁纸不错.
其实 Chromium 系浏览器
在首页右键就可以直接另存为视频
但是作为一个, 不想因为一个视频打开网页的人(闲的蛋疼)
必须的让他 自己动
对!自己动.
分析
接口返回的都是json数据
数据量也很小 处理起来很方便
测试接口 每次最大只能返回8张图片也就是8天的
最多只能获取半个月内的推荐图片
还可以修改mkt参数达到获取其他国家区域的推荐图片
不知道其他国家推荐的图片是否一样
我只是测试了一下返回的json 有其他国家语言
如果不加mkt参数, 接口会根据访问IP判断.
源码
# -*- encoding: utf-8 -*-
"""
@AuThor : Virace
"""
import requests
import json
import time
import re
from os import path, getcwd
# 根目录用户保存图片
root_path = getcwd()
# 地址 协议+域名
host = 'https://www.bing.com'
# 访问路径
url_path = '/HPImageArchive.aspx'
# 访问参数 idx=index, n=number , mkt就是国家代码, 可以修改国家代码获取不同地区的图片
_params = 'format=js&idx={}&n=8&video=1&uhd=1&mkt=zh-CN'
def param_parse(url):
"""
格式化URL访问参数
:param url: 输入URL地址
:return: 返回字典格式参数
"""
index = url.find('?')
params = dict()
if index != -1:
for thing in url[index + 1:].split('&'):
group = thing.split('=')
if len(group) == 2:
# 对于一个参数多次使用进行处理
if group[0] in params:
# 例如 http://abc.com?item=1&some=2&item=2 返回{'item1':['1', '2'], 'some':'2'}
if isinstance(params[group[0]], list):
params[group[0]].append(group[1])
else:
temp = params[group[0]]
params[group[0]] = [temp, group[1]]
else:
params.update({group[0]: group[1]})
return params
def image_downloader(url):
"""
下载图片, 因图片量不大所以未做异步处理
有需要可以尝试用 grequests 包改写或使用协程
:param url: 输入图片地址
:return: 返回下载的图片地址
"""
parms = param_parse(url)
r = requests.get(url)
# 根据地址中的id参数修改文件, 如果未查询到就用时间戳
filename = parms.get('id', '{}.jpg'.format(str(int(time.time()))))
filename = path.join(root_path, filename)
with open(filename, "wb") as file:
for chunk in r.iter_content(1000):
file.write(chunk)
return filename
def main():
json_images = list()
image_urls = list()
video_urls = list()
for item in [0, 8]:
r = requests.get(url='%s%s' % (host, url_path), params=_params.format(item))
r.raise_for_status()
json_images.extend(r.json()['images'])
for item in json_images:
if 'vid' in item:
video_urls.extend(item['vid']['sources'])
image_urls.append('%s%s' % (host, item['url']))
print(video_urls)
for item in image_urls:
image_downloader(item)
if __name__ == '__main__':
main()
源码里面没写下载视频的函数
其实都一样只是文件名区别罢了
只是因为下载完图片感觉轮换比视频好. 哈哈哈哈
打包
看论坛上很多人使用Pyinstaller打包
其实一些小工具
可以使用nuitka直接编译exe而不是打包
下载: https://www.lanzouj.com/iajqyuj 密码:52pj
解压密码: 52pojie
配合UPX可以压到很小.
文档: https://www.nuitka.net/doc/user-manual.html
nuitka可以编译pyqt等等一些gui的库.
但是不建议太大的项目去编译.
可能会有些奇怪的问题....
并不完美
因为只是自己临时用几次
所以并没有考虑, 比如说异步下载、错误处理之类的事务
还有如果是想打包后使用的方便点
建议加几个启动参数, 比如下载路径啥的
本文只是单纯分享一下 打包技术
因为这个脚本可能以后都不会打开. 哈哈
那我在这就点到为止了.