我非常喜欢故宫壁纸,但是一张一张下载的速度就太慢了。
于是,我就写了个简单的 Python 小程序自动爬取故宫壁纸。
代码
首先,我们通过简单的查看,知道故宫壁纸的页面并没有使用 JavaScript 载入。
但是故宫壁纸很多,所以还需要分类。
故宫壁纸大多都是以分类开头,如 爱上紫禁城 紫藤
, 清 虚谷紫藤金鱼图轴(局部)
等等,所以一般只需要做个简单的 startswith()
判断就 OK 了。
很多壁纸的标题都是一样的,所以还可以使用 random
库在文件名末尾追加一个随机数。
import requests, bs4, time, random path = "./wallpaper/爱上紫禁城"
catch = 0
for i in range(1, 119): url = "https://www.dpm.org.cn/lights/royal/p/{}.html".format(i) response = requests.get(url) response.encoding = "UTF-8" 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,又水了一篇文(