1. 1. 代码
  2. 2.

我非常喜欢故宫壁纸,但是一张一张下载的速度就太慢了。

于是,我就写了个简单的 Python 小程序自动爬取故宫壁纸。

代码

首先,我们通过简单的查看,知道故宫壁纸的页面并没有使用 JavaScript 载入。

但是故宫壁纸很多,所以还需要分类。

故宫壁纸大多都是以分类开头,如 爱上紫禁城 紫藤, 清 虚谷紫藤金鱼图轴(局部) 等等,所以一般只需要做个简单的 startswith() 判断就 OK 了。

很多壁纸的标题都是一样的,所以还可以使用 random 库在文件名末尾追加一个随机数。

import requests, bs4, time, random
path = "./wallpaper/爱上紫禁城"

catch = 0

for i in range(1, 119):
# 组合请求 URL
url = "https://www.dpm.org.cn/lights/royal/p/{}.html".format(i)
# 发送请求
response = requests.get(url)
# 设定页面编码为 UTF-8
response.encoding = "UTF-8"
# 从 HTML 中解析数据
soup = bs4.BeautifulSoup(response.text, "lxml")
image = soup.find_all(name="div", class_="pic")
# 循环输出图片
for n in image:
catch = catch + 1
# 获得壁纸名称
# 分类,不是以【爱上紫禁城】开头的壁纸都忽略
img_name = n.a.img["title"]
if img_name.startswith("明"):
print("{}. {}".format(catch, n.a.img["title"]))
# 组合获得壁纸页面
url_1080 = "https://www.dpm.org.cn" + n.a["href"]
# 请求高清版网页
response_img = requests.get(url_1080)
# 再次解析
soup_img = bs4.BeautifulSoup(response_img.text, "lxml")
# 获取页面中的图片
data = soup_img.find_all(name="img")[0]
# 获得壁纸图片的链接
img_url = data["src"]
# 保存图片
pic = requests.get(img_url).content
file_name = path + img_name + "-" + str(random.randint(100000, 999999)) + ".jpg"
# 写入文件
with open(file_name, "wb") as file:
file.write(pic)

else:
print("!Ignore: " + img_name)

我把一些我下载下来的壁纸放在了 这里,可以直接预览并下载。

OK,又水了一篇文(