雨润年华

电子DIY爱好者的家园

利用Python3获取下载每日bing图片

利用Python3获取下载每日bing图片

使用到的库,requests库 和 lxml库需要自己在cmd窗口里安装,下载安装命令在后面的括号里

requests (pip install requests)
lxml (pip install lxml)
datetime
time

运行环境
python版本:(python3)
编辑器:Thonny
浏览器:Chrome

请输入图片描述

1.分析网页

bing有国际版和国内版之分,其实网页结构没有什么区别,只是一个中文一个英文而已,我这选择了国内版,国内版要比国际版更新更早,更符合国人的时间。
下面打开开发者工具(F12),分析具体的结构,找到每日背景图,在head里面
我们想个办法复制上图左侧列表中所找到的正确文件名,然后点击Elements这个按钮,接着按Ctrl+F键查找,得到其网页结构的位置
在上图箭头指着的位置右键,然后依次点击Copy —> Copy Xpath,复制它的Xpath路径。这样我们的代码就来了

2.爬取图片

首先请求主页面

url = "https://cn.bing.com"
rs = requests.get(url=url)

然后使用Xpath对网页进行解析

# 对网页解析
try :
    html = etree.HTML(rs.content)
    imgUrl = html.xpath('//*[@property="og:image"]/@content')[0] + 'LaDigue_1920x1080.jpg'
    print(imgUrl)
except :
    print('Get Url Error')
    #imgUrl = ''

接着获取图片内容

imgRs = requests.get(url=imgUrl)

我们在该python文件的同级目录下手动新建一个bgImg的文件夹存放爬取下来的图片,然后使用datetime库,使用当前时间作为文件名。

time = datetime.datetime.now()
str_time = datetime.datetime.strftime(time, "%Y-%m-%d")

最后我们将图片存在文件夹中

path = "./bgImg/{}.jpg".format(str_time)
with open(path, "wb") as f:
    f.write(imgRs.content)

3.每间隔一天爬取一次

这里的话,我自己的相关博文还没写好,我参考的资料传送门Python3.x:定时任务实现方式,有七八种方法。

我这里就用最简单的time.sleep(),在外层写一个永真的while循环,里面写一句time.sleep(24 60 60)
让程序休眠24小时60分钟60秒,这里是休眠的,所以也不必担心它会挤占电脑的内存。

if __name__ == '__main__':
while 1:
    main()
    time.sleep(24 * 60 * 60)

完整程序如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import requests
from lxml import etree
import datetime
import time

def main():
    # 请求主页面
    url = "https://cn.bing.com"
    rs = requests.get(url=url)
    
    
    # 对网页解析
    try :
        html = etree.HTML(rs.content)
        imgUrl = html.xpath('//*[@property="og:image"]/@content')[0] + 'LaDigue_1920x1080.jpg'
        print(imgUrl)
        #imgUrl = 'https://bing.ioliu.cn/?p={}'.format(0)
    except :
        print('Get Url Error')
        imgUrl = ''
    
    # 获取图片内容
    imgRs = requests.get(url=imgUrl)
    
    time = datetime.datetime.now()
    str_time = datetime.datetime.strftime(time, "%Y-%m-%d")
    print(time)
    path = "./bgImg/{}.jpg".format(str_time)
    with open(path, "wb") as f:
        f.write(imgRs.content)
        
        
if __name__ == '__main__':
    while 1:
        main()
        time.sleep(24 * 60 * 60)

本原创文章未经允许不得转载 | 当前页面:雨润年华 » 利用Python3获取下载每日bing图片

评论