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首頁

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章