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

yizhihongxing

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日

相关文章

  • 爬虫那些事儿–站点压力控制相关

      经过前面的介绍,我们大致了解了站点压力控制对于爬虫的重要性。但是站点压力控制对于爬虫来说,是一个比较Open的话题。即到目前为止也没有一个很准确的压力控制方法。 主要的问题由于以下几点: 不同站点对于爬虫的压力允许程度不同。 即由于站点的规模不同、站点的服务器配置不同等。不同的站点能承受的压力是不同的。同时不同的站点对于爬虫的友好程度不同。有些站点允许爬…

    爬虫 2023年4月8日
    00
  • 使用python绘制cdf的多种实现方法

    使用Python绘制CDF(累积分布函数)是数据分析中常用的一项技术,下面将介绍几种方法实现CDF的绘制。 方法一:使用Numpy和Matplotlib绘制CDF 步骤一:导入必需库 import numpy as np import matplotlib.pyplot as plt 步骤二:创建实验数据 data = np.random.normal(si…

    python 2023年5月18日
    00
  • python批量下载抖音视频

    Python批量下载抖音视频是一个非常有用的应用场景,可以帮助我们在Python中快速下载抖音视频。本攻略将介绍Python批量下载抖音视频的完整攻略,包括数据获取、数据处理、数据存储和示例。 步骤1:获取数据 在Python中,我们可以使用requests库获取网页数据。以下是获取抖音视频页面数据的示例: import requests url = ‘ht…

    python 2023年5月15日
    00
  • Python工厂模式实现封装Webhook群聊机器人详解

    Python工厂模式实现封装Webhook群聊机器人详解 简介 工厂模式是一种创建型设计模式,其提供了一种创建对象的最佳方式,而不必指定将要创建的对象的确切类。在本文中,我们将讨论如何使用工厂模式来创建Webhook群聊机器人。 Webhook是一种机器人的工作方式,它会将所有收到的消息发送到预定义的Webhook URL。有了Webhook,我们可以在机器…

    python 2023年5月23日
    00
  • Python开发之利用re模块去除代码块注释

    针对“Python开发之利用re模块去除代码块注释”的完整攻略,以下是我详细的讲解: 一、准备工作 首先,我们需要将Python编程语言安装至电脑中。在已完成安装后,在代码编辑器中打开Python文件,便可进行代码的编写。 二、正则表达式 在Python中,我们可以使用re模块来进行正则表达式的匹配。 在本次攻略中,我们需要使用正则表达式来查找注释并替换为空…

    python 2023年6月3日
    00
  • Python实现模拟分割大文件及多线程处理的方法

    这里为大家讲解一下如何使用Python实现模拟分割大文件及多线程处理的方法。 什么是模拟分割大文件及多线程处理? 模拟分割大文件及多线程处理,指的是将大型文件分割成若干个小型文件,用多线程的方式进行并行处理,最后将处理结果汇总。 在大型数据文件的处理中,模拟分割大文件及多线程处理可以提高程序运行效率,加快数据分析速度,节省时间和计算资源。 实现步骤 1. 文…

    python 2023年6月6日
    00
  • Python selenium爬虫实现定时任务过程解析

    下面我将为您详细讲解Python selenium爬虫实现定时任务的过程。 一、准备工作 在开始实现定时任务之前,需要先安装selenium和定时任务模块schedule。 安装selenium 使用pip安装selenium模块: pip install selenium 安装schedule模块 使用pip安装schedule模块: pip instal…

    python 2023年6月6日
    00
  • 一篇文章带你了解python正则表达式的正确用法

    一篇文章带你了解Python正则表达式的正确用法 正则表达式是一种用于描述字符串模式的语言,可以用匹配、查找、替换和割字符串。Python中的re模块提供了正则表达式支持,方便进行字符串的处理。本文将详细讲解Python正则表达式使用,包括正则表达式语法、re模块的常用函数以及两个用匹配实例。 正则表达式语法 正则表达式由一些特殊字符和普通字符组成,用于字符…

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