如何使用Python批量下载网站图片

在数字时代,图片是信息传递和分享的重要方式之一。如果你经常需要从网站上下载大量图片,那么手动下载将会是一项繁琐的任务。但是,不用担心!本教程将向你展示如何使用Python编写一个脚本来批量下载网站上的图片,让这项任务变得轻松而高效。

开篇故事

假设你是一名摄影爱好者,热衷于收集各种美丽的图片。你听说有一个网站,上面有数以千计的精美图片等待着你去探索。然而,手动一个一个下载这些图片将耗费你大量的时间和精力,于是你决定寻找一种更聪明的方式。

这时,Python走进了你的视野。你得知可以使用Python编写一个脚本,让它自动帮你下载这些图片。这听起来很酷,不是吗?那么,让我们开始吧!

步骤一:准备工作

首先,我们需要安装几个Python库,以便在脚本中使用它们。这些库包括requests、lxml和concurrent.futures。你可以使用以下命令来安装它们:

pip install requests lxml

这些库将帮助我们进行网页请求、解析HTML以及并发下载图片。

步骤二:编写下载图片的函数

接下来,我们将编写一个函数,用于从指定的URL下载图片并保存到本地。这个函数将接受两个参数:图片的URL和保存路径。以下是这个函数的代码:

import requests
import os

def download_image(url, img_path):
    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'}
    response = requests.get(url, headers=headers)
    img_name = url.split('/')[-1]
    with open(os.path.join(img_path, img_name), 'wb') as f:
        f.write(response.content)
        print(f'图片:{img_path}' + '/' + f'{img_name}下载完成!')

这个函数首先发送HTTP请求以获取图片的内容,然后将内容保存到本地文件。在保存文件时,我们使用了图片的URL中的文件名作为文件名。

步骤三:编写处理网页的函数

现在,我们需要编写一个函数来处理网页,提取出图片的URL,并调用上面的download_image函数来下载图片。以下是这个函数的代码:

from lxml import etree

def process_page(page):
    url = f'https://www.****.****/page/{page}'
    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'}
    response = requests.get(url, headers=headers)
    html = etree.HTML(response.content)
    img_urls = html.xpath('//div[@class="excerpts"]/article/a/@href')

    for img_url in img_urls:
        response = requests.get(img_url, headers=headers)
        html = etree.HTML(response.content)
        img_elements = html.xpath('//article/p/img')
        img_title = html.xpath('//title/text()')[0].split('-')[0]
        img_path = f'J:/xiezhen/{img_title}'

        if not os.path.exists(img_path):
            os.makedirs(img_path)

        for img_element in img_elements:
            img_url = img_element.attrib['src']
            download_image(img_url, img_path)

        time.sleep(0.5)

这个函数首先访问指定页面的URL,然后使用XPath解析HTML,提取出文章页面的链接。接着,它遍历每个文章页面的链接,进一步提取出图片的URL和标题。然后,它创建一个以标题命名的文件夹,将图片保存在其中。

步骤四:并发下载

为了提高下载速度,我们可以使用Python的concurrent.futures模块来实现并发下载。以下是如何使用该模块的代码:

import concurrent.futures

if __name__ == '__main__':
    with concurrent.futures.ThreadPoolExecutor() as executor:
        futures = []
        for page in range(1, 573):
            futures.append(executor.submit(process_page, page))
        for future in concurrent.futures.as_completed(futures):
            pass

这段代码会创建一个线程池,每个线程将处理一个页面的下载任务。我们遍历了从1到572的页面,并将每个页面的处理函数process_page提交给线程池。最后,我们等待所有任务完成。

结语

通过这个简单的Python脚本,你可以轻松实现批量下载网站图片的任务。不再需要手动一个一个下载,节省了大量时间和精力。这是Python的强大之处,它可以帮助你自动化各种任务,让生活更加便捷。

本文由作者 王大神 原创发布于 大神网的AI博客。

转载请注明作者:王大神

原文出处:如何使用Python批量下载网站图片

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 2023年10月19日
下一篇 2023年10月19日

相关推荐

  • 动态规划解决零钱兑换问题:编程与算法详解

    在我们日常生活中,经常会遇到需要用最少的货币数量支付特定金额的场景,比如在超市结账时。这看似简单的任务,实际上蕴含了计算机科学中的一个经典问题——零钱兑换问题。这个问题不仅考验我们的逻辑思维能力,还是…

    2023年11月25日
    00
  • 走进AI时代:王大神的技术博客

    人们时常沉浸在音乐和技术的海洋中,寻找着创新与灵感。正如我,一个自由职业者,对音乐和技术充满热情。远程工作让我拥有自由和灵活性,但也带来了挑战。在这篇文章中,我们将探讨如何在AI时代中,充分利用技术,…

    2023年12月17日
    00
  • Python编程与人工智能:探索技术的魔力

    大家好,我是王大神,今天我要和大家分享一段关于Python编程与人工智能的故事。这是一个充满魔力和无限可能性的领域,让我们一起探索吧。 开篇故事 曾几何时,在一个寂静的夜晚,我坐在电脑前,思考着编程和人工智…

    2023年10月6日
    00
  • 如何利用自然语言处理实现文本分析和情感分析

    大家好!今天我要和你分享一个非常有趣的话题——如何使用自然语言处理(NLP)来进行文本分析和情感分析。不仅如此,我还将介绍如何通过Python编程来实现这些分析,以及如何应用NLP技术来自动化处理大量文本数据。这…

    2023年9月20日
    00
  • 用python写一个机翻stable-diffusion-webui本地化文件(localizations.json)的小脚本

    有时候,我们需要将一个软件或网站的本地化文件进行翻译,以适应不同的语言和地区。而这项工作可以通过编写一个小脚本来自动化完成,大大提高效率。本教程将教您如何使用Python编写一个机翻stable-diffusion-webui…

    2023年1月27日
    00
  • 探索圆周率:从数学常数到计算机编程

    圆周率(π)是一种神秘而令人着迷的数学常数,它一直以来都吸引着数学家、科学家和计算机程序员。这个常数代表着一个圆的周长与直径的比值,但它的价值却是一个无限不循环的小数。在本教程中,我们将深入探讨圆周率…

    2023年10月21日
    00
  • 如何使用Python将彩票数据存入数据库

    在数据科学和分析领域,获取和存储数据是至关重要的一步。本教程将介绍如何使用Python编程,从一个网站获取双色球(SSQ)彩票的历史数据,并将这些数据存入MySQL数据库。这个教程将向您展示如何使用Python的Request…

    2023年11月26日
    00
  • 解决未定义数组键问题:我的个人经历与技巧分享

    在这篇文章中,我将分享我如何面对和解决编程中遇到的“未定义数组键”问题,以及我采用的具体技巧和方法。通过这次经历,我希望能帮助读者更好地理解和避免此类问题。 作为一名专注于人工智能领域的开发者,我经常需…

    2024年3月22日
    00
  • 个人发展:如何利用Python和人工智能开启职业新征程

    曾经有一位名叫小明的年轻人,他一直对人工智能(AI)和编程充满了浓厚的兴趣。然而,他一直在犹豫不决,不知道如何将这些兴趣转化为实际的职业发展。直到有一天,他听说了Python编程语言和人工智能的结合可以开启…

    2023年10月21日
    00
  • 如何在游戏切换到后台时智能管理进程,节省CPU资源

    大家好,我是王大神,今天我们要探讨的话题是如何在玩游戏的同时,聪明地管理游戏进程,以便节省CPU资源。你是否曾经在等待游戏加载过程中感到烦躁,或者担心游戏会一直占用你宝贵的计算机资源?那么,本文将向你介…

    2023年9月19日
    00