使用 Python 爬取故宫壁纸

CKY 于 2021/7/17 在「极客」发布。
标签: #壁纸#Python#爬虫

使用 Python 和 BeautifulSoup4 爬取故宫壁纸

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

于是,我就写了个简单的 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,又水了一篇文(

由 Google 提供的广告

此广告内容由 Google Ads 提供,与 CKY.IM 无关,请注意识别。为什么会显示广告?