python爬虫 爬取超清壁纸代码实例

Python爬虫 爬取超清壁纸代码实例

网站分析

在准备开始爬取壁纸之前,需要先分析目标网站。本例中我们使用的是Pixabay图库网站来进行数据爬取。

首先,我们打开目标网站,随后打开浏览器的开发者工具,选择 Network(网络)选项卡,刷新页面后看到已经加载好的资源。

在筛选后,我们可以找到查找数据的文件(XHR 类型),例如搜索图片时的请求数据 url 如下:/api/?key=<API key>&q=<搜索关键字>&image_type=photo&pretty=true&per_page=100&safesearch=true&order=latest&orientation=horizontal。可以看到,请求参数很清晰地表示了需要获取哪些数据。

获取 API Key

为了访问 Pixabay API,你需要先注册一个账户并获取 API Key。在 这里 注册账户并创建一个 API Key。

安装依赖

接下来,需要先安装解析 JSON 格式数据的库——json,以及用于请求数据和解析 HTML 页面的库——requestsBeautifulSoup4。在命令行中使用以下命令安装:

pip install requests beautifulsoup4

编写代码

下面贴上完整的 Python 代码,该代码会从 Pixabay API 获取高质量的图片,然后将其按照分类下载至本地,程序运行完毕后,将在程序所在的文件夹中生成按照分类组织好的壁纸文件夹。

import os
import requests
import json
from bs4 import BeautifulSoup

class PixabayScraper:
    def __init__(self, key:str):
        self.key = key
        self.url = "https://pixabay.com/api/"
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}

    def search(self, query:str, category:str, per_page:int, save_path:str):
        params = {
            'key': self.key,
            'q': query,
            'category': category,
            'image_type': 'photo',
            'pretty': 'true',
            'per_page': per_page,
            'safesearch': 'true',
            'order': 'latest',
            'orientation': 'horizontal'
        }
        response = requests.get(url=self.url, headers=self.headers, params=params)
        html = json.loads(response.text)

        for image in html['hits']:
            src = image['largeImageURL']
            r = requests.get(src, headers=self.headers)
            filename = os.path.join(save_path, src.split("/")[-1])
            with open(filename, 'wb') as f:
                f.write(r.content)
                print("壁纸已保存:", filename)

    def scrape(self, categories:list, queries:list, per_page:int, save_dir:str):
        if not os.path.exists(save_dir):
            os.makedirs(save_dir)

        for category in categories:
            category_dir = os.path.join(save_dir, category)
            if not os.path.exists(category_dir):
                os.makedirs(category_dir)

            for query in queries:
                query_dir = os.path.join(category_dir, query)
                if not os.path.exists(query_dir):
                    os.makedirs(query_dir)
                self.search(query=query, category=category, per_page=per_page, save_path=query_dir)


if __name__ == '__main__':
    categories = ['backgrounds', 'nature', 'science', 'education', 'feelings', \
                  'health', 'people', 'religion', 'places', 'animals', 'industry', \
                  'food', 'computer', 'sports', 'transportation', 'travel', \
                  'buildings', 'business', 'music']
    queries = ['ocean', 'holiday', 'sunrise', 'sunset', 'desert', 'beach', 'mountain', \
                'skyline', 'cityscape', 'waterfall', 'underwater', 'wildlife', \
                'landscape', 'architecture']
    per_page = 20
    save_dir = "wallpapers/"

    api_key = '<Your Pixabay API Key>'
    pixabay_scraper = PixabayScraper(key=api_key)
    pixabay_scraper.scrape(categories=categories, queries=queries, per_page=per_page, save_dir=save_dir)

接下来我们详细讲解一下核心代码的实现:

首先是在 PixabayScraper 类中实现的 search 方法。该方法内部调用了爬取图片的 API,并下载图片至本地。使用 requests 库的 get 方法来获取 API 返回的 JSON 格式数据,并将其解析为 dict。接着,从数据中提取出图片的 URL,使用 requests 库下载图片并保存至本地。

    def search(self, query:str, category:str, per_page:int, save_path:str):
        params = {
            'key': self.key,
            'q': query,
            'category': category,
            'image_type': 'photo',
            'pretty': 'true',
            'per_page': per_page,
            'safesearch': 'true',
            'order': 'latest',
            'orientation': 'horizontal'
        }
        response = requests.get(url=self.url, headers=self.headers, params=params)
        html = json.loads(response.text)

        for image in html['hits']:
            src = image['largeImageURL']
            r = requests.get(src, headers=self.headers)
            filename = os.path.join(save_path, src.split("/")[-1])
            with open(filename, 'wb') as f:
                f.write(r.content)
                print("壁纸已保存:", filename)

接下来是 PixabayScraper 类中实现的 scrape 方法。该方法包含了对图片类别和图片关键字的遍历,以获取所有图片。最后,将遍历结果按照图片类别和关键字来组织存放。

    def scrape(self, categories:list, queries:list, per_page:int, save_dir:str):
        if not os.path.exists(save_dir):
            os.makedirs(save_dir)

        for category in categories:
            category_dir = os.path.join(save_dir, category)
            if not os.path.exists(category_dir):
                os.makedirs(category_dir)

            for query in queries:
                query_dir = os.path.join(category_dir, query)
                if not os.path.exists(query_dir):
                    os.makedirs(query_dir)
                self.search(query=query, category=category, per_page=per_page, save_path=query_dir)

示例说明

示例一:按关键字下载壁纸

我们可以通过传入一个关键字来下载相关的壁纸。例如,我们输入关键字 "beach",那么程序将会自动下载所有与海滩相关的壁纸。

    if __name__ == '__main__':
        categories = ['backgrounds', 'nature', 'science', 'education', 'feelings', 'health', 'people', 'religion', 'places', 'animals', 'industry', 'food', 'computer', 'sports', 'transportation', 'travel', 'buildings', 'business', 'music']
        queries = ['beach']
        per_page = 20
        save_dir = "wallpapers/"

        api_key = '<Your Pixabay API Key>'
        pixabay_scraper = PixabayScraper(key=api_key)
        pixabay_scraper.scrape(categories=categories, queries=queries, per_page=per_page, save_dir=save_dir)

示例二:按类别下载壁纸

我们也可以按照壁纸的类别进行下载。例如,我们输入壁纸类别 category "nature",那么程序将会自动下载所有与自然景观相关的壁纸。

    if __name__ == '__main__':
        categories = ['nature']
        queries = ['ocean', 'holiday', 'sunrise', 'sunset', 'desert', 'beach', 'mountain', 'skyline', 'cityscape', 'waterfall', 'underwater', 'wildlife', 'landscape', 'architecture']
        per_page = 20
        save_dir = "wallpapers/"

        api_key = '<Your Pixabay API Key>'
        pixabay_scraper = PixabayScraper(key=api_key)
        pixabay_scraper.scrape(categories=categories, queries=queries, per_page=per_page, save_dir=save_dir)

从以上两个示例中可以看出,PixabayScraper 类提供了十分灵活和方便的图片下载方式,可以根据设定的参数自定义下载内容。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python爬虫 爬取超清壁纸代码实例 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • Python知识之列表的十个小技巧分享

    Python知识之列表的十个小技巧分享 在Python编程中,列表是一种非常常用的数据类型。下面将介绍十个小技巧,帮助你更加高效地使用列表。 技巧1:使用列表推导式 推导式是Python中常用的一种语法,它可以快速生成一个列表。下面是一个示例演示了如何使用列表推导式生成一个包含1到的整数的列表 lst = [i for i in range(1, 11)] …

    python 2023年5月13日
    00
  • python 如何用 Hypothesis 来自动化单元测试

    下面是关于使用 Hypothesis 自动化单元测试的完整攻略。 什么是 Hypothesis? Hypothesis 是一个基于属性推理(property-based)的 Python 测试框架,它使用了随机数据生成器和“假设”(assumptions)来创建、执行和简化测试。该框架允许你只编写一小部分的测试用例,就能发现许多边缘情况和隐含错误。 安装 H…

    python 2023年5月19日
    00
  • python3.0 字典key排序

    针对“python3.0字典key排序”的完整攻略,我将为你详细解释。 1. 前言 在Python 2.7版本之前,字典是无序的,无法按照key的值进行排序。从Python 2.7版本开始,字典的遍历顺序与元素添加顺序相同。而在Python 3.0及以上版本,对字典进行升序或降序排列是原生支持的。 2. 字典key升序排列 使用Python内置的sorted…

    python 2023年5月13日
    00
  • Python面向对象编程(二)

    下面是详细讲解“Python面向对象编程(二)”的完整攻略: 一、面向对象中的继承 继承是面向对象编程中的重要概念,其本质是在已有的类的基础上进行扩展和修改,这样能够大大减少代码的冗余和重复编写,提高程序的可维护性。 1.1 类的定义与创建 在Python中,我们可以通过以下方式定义并创建一个类: class Animal: def __init__(sel…

    python 2023年5月13日
    00
  • python 正则表达式的使用

    Python正则表达式的使用攻略 正则表达式是一种强大的文本处理工具,可以用于匹配、查找、替换和割字符串。Python提供了re模块来处理正则表达式,本文将为您详细解Python正则表达式的语法、re模块的常用方法和两个示例说明。 正则表达式的语法 在正则表达式中,使用[]表示字符集,^表示取反,-表示范围,+表示匹配一个或多个字符,*表示匹配零个或多个字符…

    python 2023年5月14日
    00
  • Python入门教程之Python的安装下载配置

    Python入门教程之Python的安装下载配置 简介 Python是一种非常流行的,易学易用的开源编程语言。在学习Python之前,我们需要先安装下载配置Python编程环境。本文将讲解Python的安装下载配置的详细攻略。 步骤一:下载Python 我们可以在Python官网(https://www.python.org/downloads/)找到各种操…

    python 2023年5月14日
    00
  • Python 函数基础知识汇总

    Python函数基础知识汇总 什么是函数? 在Python中,函数是一段代码块,用于执行特定的任务。函数接受输入,并在一些处理之后返回输出。 函数可以让我们编写可重用代码,避免重复编写相同的代码。同时,函数的使用也使得代码看起来更加简洁易懂。 如何定义函数? 在Python中,定义函数非常简单。使用def关键字,指定函数名称以及输入参数,就可以定义一个函数了…

    python 2023年5月13日
    00
  • 女神相册密码忘记了 我只用Python写了20行代码

    下面是操作步骤和示例: 打开“女神相册”登录页面,有效账户的密码进行尝试,看看是否可以登录成功。 如果你无法记得自己的密码,可以点击登录页面下方的“忘记密码”链接,根据提示进行密码重置操作。 如果你仍然无法登录,可以查看登录页面的源代码,尝试使用Python代码来模拟登录过程。 以下是示例1: import requests login_url = &quo…

    python 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部