吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3937|回复: 30
收起左侧

[Windows] 【Python之点到为止】获取Bing首页视频、以及每日推荐图片

[复制链接]
Virgo之最 发表于 2020-3-23 03:45

点到为止——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的库.
但是不建议太大的项目去编译.
可能会有些奇怪的问题....

并不完美

因为只是自己临时用几次
所以并没有考虑, 比如说异步下载、错误处理之类的事务
还有如果是想打包后使用的方便点
建议加几个启动参数, 比如下载路径啥的

本文只是单纯分享一下 打包技术
因为这个脚本可能以后都不会打开. 哈哈

那我在这就点到为止了.

免费评分

参与人数 8吾爱币 +5 热心值 +8 收起 理由
一萬只草泥马 + 1 + 1 热心回复!
can_moon + 1 + 1 热心回复!
yhtg + 1 + 1 鼓励转贴优秀软件安全工具和文档!
白泽雪山 + 1 我很赞同!
shangwuxiaoming + 1 我很赞同!
mfk1981 + 1 + 1 我很赞同!
TimeAIssr + 1 热心回复!
joneqm + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

mfk1981 发表于 2020-3-23 08:11
Python目前相当热门。
应用代码附上说明,无疑给初学和爱好者提供一条进阶之路。
好文。
 楼主| Virgo之最 发表于 2020-3-23 14:57
KWONJY 发表于 2020-3-23 13:39
为什么我另存为就是HTML文件啊?

选择网页的下半部分
因为上半部分有个div挡着呢

下半部分右键就有 "视频另存为"了
q10123 发表于 2020-3-23 04:37
看,六眼飞鱼 发表于 2020-3-23 04:46
作为一个天天用必应的人来说,要不是你说,我还真没发现变视频了
hotmmail0451 发表于 2020-3-23 07:23
来学习的
卫国 发表于 2020-3-23 07:26
谢谢楼主分享,顶一个
时光荏苒97 发表于 2020-3-23 07:35
收藏了,感谢分享。
港湾999 发表于 2020-3-23 07:49
新人正在努力学习,老师辛苦了,感谢老师分享
OO2OO 发表于 2020-3-23 07:50
学习了,谢谢楼主分享
qs1120 发表于 2020-3-23 07:53
楼主python武功卓绝
一人之下123456 发表于 2020-3-23 07:56
感谢分享,学习了,
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-9-12 07:48

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表