Home Python脚本抓取Bing美图
Post
Cancel

Python脚本抓取Bing美图

post_background

使用Python脚本下载Bing美图

Bing首页每天都会展示不同的图片,如果每天都去首页下载就比较麻烦了,于是乎想到了用Python脚本来代替,自动保存到图片目录下,省时省力。

Bing美图API

Bing官方有两个API:

  • xml版: http://cn.bing.com/HPImageArchive.aspx?idx=0&n=1
  • json版: http://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1

有了API就可以愉快地抓图了:D

Python抓图

至于为什么要用Python,前段时间学习了廖大的Python教程,算是跟着把整个教程做完了,就放了一段时间。现在突然想弄个小工具来下Bing美图,嗯,就是它了!

用到的库

爬图 (更新于2018-04-04)

这里我用了json版的API,使用requestsjson()函数直接返回了API中的json字段,返回的类型是一个字典。我们需要的下载链接在images所对应的值里面。得到images的值后,他是一个列表,且里面嵌套了一个字典,我们提取出列表里的字典,然后根据键值url来得到图片的地址。改地址只是部分地址,我们还需要在地址前面加上https:://www.bing.com,将两个地址合起来就是图片的真实地址了,通过真实地址,就可以下载到bing主页的背景图片了。

源代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# -*- coding: utf-8 -*-
import requests
import os
import time


def get_content(url):
    """
    得到API返回的JSON数据
    :param url: API链接
    :return: 返回的是一个字典
    """
    try:
        r = requests.get(url)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.json()
    except:
        print("ERROR")


def get_img(url):
    """
    得到图片的内容
    :param url: 图片的真实链接
    :return: 返回的是byte类型的图片内容
    """
    try:
        r = requests.get(url)
        return r.content
    except:
        return None


def download(file_name, url):
    """
    根据得到的链接在指定位置保存图片
    :param file_name: 要保存图片的位置
    :param url: 图片的链接
    :return: 
    """
    if os.path.exists(r'C:\Users\Freed\Pictures\bingwallpaper'):
        print('Find Dir...')
    else:
        print("File dir did not exist, make dir...")
        try:
            os.mkdir(r'C:\Users\Freed\Pictures\bingwallpaper')
            print('Make dir success')
        except:
            print('Failed in make dir')
    if os.path.exists(r'c:\users\freed\pictures\bingwallpaper\\' + file_name):
        print('Image downloaded already')
    else:
        img = get_img(url)
        with open(r'c:\users\freed\pictures\bingwallpaper\\' + file_name,
                  'wb') as f:
            f.write(img)
        print('Download success')


if __name__ == '__main__':
    url = "https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1"
    content = get_content(url)
    url_dict = content['images'][0]
    download_url = 'https://www.bing.com' + url_dict['url']

    file_name = str("BingWallPaper-" + time.strftime('%Y-%m-%d',
                                                     time.localtime(time.time())) + '.jpg')
    download(file_name, download_url)

用Python命令运行文件即可。 到此大功告成! :D

This post is licensed under CC BY 4.0 by the author.