python代码获取Bing的首页背景图,并实现实现每日自动爬取,爬取的图片可做精美壁纸

都0202年了,还在找电脑壁纸资源吗?还在右键另存图片吗?还要自己费事费力做这些事情吗?好啦,现在有这个python程序,都省了。

因为我之前也在为找电脑壁纸资源而苦恼,一是没有好看的图片,二是没有什么特别好的固定地方让我下载图片,听说bing(必应)的首页好看,我这去一看,果不其然,漂亮,所以我就编写一个小爬虫来爬取这个图片,但是转念一想,每天都要手动运行吗?太难为人了(好吧,是我懒了),我就去找办法看看能不能每天定时执行这个程序,皇天不负有心人,找到了方法,而且不止一种,废话不多说了,下面进入正题。


手动分割线:
emm,昨天刚发的就要微调一下,我今天早上8点上电脑看看效果,然鹅突然发现国内版的bing要比国际版的bing更新的早,于是乎,我微调一下哈,大体结构是不会变的,就是 url 改了一下,代码已修改。——2020.01.03


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

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

1.分析网页

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

2.爬取图片

首先请求主页面

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

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

html = etree.HTML(rs.content)
imgUrl = 'https://cn.bing.com' + html.xpath('//*[@id="bgLink"]/@href')[0]

接着获取图片内容

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秒,这里是休眠的,所以也不必担心它会挤占电脑的内存。

while 1:
    main()
    time.sleep(24 * 60 * 60)

4.完整代码

#!/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)

    # 对网页解析
    html = etree.HTML(rs.content)
    imgUrl = 'https://cn.bing.com' + html.xpath('//*[@id="bgLink"]/@href')[0]

    # 获取图片内容
    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)


彩蛋
今天是2020-01-02,然后有两张图了,都附上啦,这些看着还是蛮精美的嘛。祝大家在新的一年里也特别精彩特别美好!
bing2020-01-01首页
bing2020-01-02首页

发布了56 篇原创文章 · 获赞 70 · 访问量 8916

猜你喜欢

转载自blog.csdn.net/weixin_44835732/article/details/103801410