063、获取必应桌面壁纸
本文最后更新于 258 天前,其中的信息可能已经过时,如有错误请发送邮件到wuxianglongblog@163.com

获取必应桌面壁纸

网上冲浪的时候,发现了一个不错的必应壁纸网址:

http://bing.wallpaper.pics

可以利用所学的知识,每天定时去这个网站把图片下载下来。

先定义一个URL链接对象:

webpage = "https://bing.wallpaper.pics/us/20220506.html"

为了访问这个网址,需要调用urllib模块:

import urllib.request

部分网址会有一些简单的反爬虫策略,需要在使用模块urllib.request时,传入一些访问网页必须的参数,如网页的headers。

urllib.request模块提供了Request对象实现headers的传入:

headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'
}
webpage_url = urllib.request.Request(webpage, headers=headers)

利用该对象,可以访问这个网址,并设置超时为20秒:

with urllib.request.urlopen(webpage_url, timeout=20) as f:
    data = f.read()

urllib模块返回的结果是一个bytes对象,而不是str,因此需要调用.decode()方法将其转换为字符串:

type(data)
bytes
content = data.decode("utf-8")

对于得到的网页内容字符串,可以使用正则表达式提取其中墙纸图片的URL链接:

import re
for g in re.finditer("src=\'(//[^\']*.jpg)", content):
    pic_url = "http:" + g.group(1)
    print(pic_url)
http://www.bing.com/th?id=OHR.SwedishAntenna_ZH-CN9163420082_1920x1080.jpg&rf=LaDigue_1920x1080.jpg

注意,这个链接的正则表达式是通过观察网页的源代码后编写的,并不是通用的提取url的方法。

利用正则表达式,可以从图片URL中解析出图片的名称:

pic_name = re.search("([^/.&]*\.jpg)", pic_url).group(1)
pic_name
'SwedishAntenna_ZH-CN9163420082_1920x1080.jpg'

利用urllib.request.urlretrieve()函数下载图片:

urllib.request.urlretrieve(pic_url, pic_name)
('SwedishAntenna_ZH-CN9163420082_1920x1080.jpg',
 )

加载图片:

from PIL import Image
pic = Image.open(pic_name)
pic


png

%rm *.jpg

由于BING每天都会更新墙纸,为了每次能更新前一天的数据,可以考虑将图片网址的URL改为使用每天的日期计算得到:

import datetime
pre_date = datetime.date.today() - datetime.timedelta(days=1)
webpage = f"https://bing.wallpaper.pics/us/{pre_date.strftime('%Y%m%d')}.html"
webpage
'https://bing.wallpaper.pics/us/20220617.html'

考虑到可能需要获取其他日期的墙纸,在脚本模式下,考虑利用sys.argv接受一个指定参数,从多少天前开始进行循环下载。另一方面,每次下载完图片后,需要利用time模块和random模块随机停止几秒,防止反爬虫机制的触发。

综合之前的实现,一个完整程序“wallpaper.py”的实现代码如下:

%%writefile wallpaper.py
import sys
import re
import datetime
import urllib.request
import time
import random
from pathlib import Path

max_days = 1
if len(sys.argv) == 2:
    max_days = int(sys.argv[1])

headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'}

wallpaper = Path("wallpaper")
if not wallpaper.exists():
    wallpaper.mkdir()

for i in range(max_days, 0, -1):
    cur_date = datetime.date.today() - datetime.timedelta(days=1)
    webpage = f"https://bing.wallpaper.pics/us/{cur_date.strftime('%Y%m%d')}.html"
    webpage_url = urllib.request.Request(webpage, headers=headers)
    print(webpage)
    with urllib.request.urlopen(webpage_url, timeout=20) as f:
        data = f.read()
    content = data.decode("utf-8")
    for g in re.finditer("src=\'(//[^\']*.jpg)", content):
        pic_url = "http:" + g.group(1)
        print(pic_url)
        pic_name = re.search("([^/.&]*\.jpg)", pic_url).group(1)
        if not (wallpaper / pic_name).exists():
            urllib.request.urlretrieve(pic_url, wallpaper / pic_name)
    time.sleep(random.randint(1, 5))
Writing wallpaper.py
%rm wallpaper.py
谨此笔记,记录过往。凭君阅览,如能收益,莫大奢望。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇