如何使用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日

相关推荐

  • Python编程入门:如何进入编程界面

    想象一下,你站在编程的门槛前,渴望着探索这个充满创造力和可能性的领域。Python,这门被誉为“编程入门的最佳选择”的编程语言,等待着你的探索。但在你开始之前,你需要知道如何进入Python编程界面,就像打开一扇…

    2023年9月25日
    00
  • 自动签到脚本制作教程

    在现代快节奏的生活中,自动化工具变得越来越重要。本教程将向您介绍如何制作一个简单但强大的自动签到脚本,帮助您节省时间和精力。我们将使用Python编程语言和一些常见的自动化工具来实现这个目标。让我们开始吧…

    2023年12月10日
    00
  • 下面是一个简单的 Python 程序,它可以帮助你躺着赚钱。

    在计算机编程的世界中,有许多有趣的程序和项目,但有一个特别引人注目的想法是能够躺在床上或沙发上,同时通过编写代码来赚钱。尽管这个想法听起来有点不切实际,但我们可以编写一个示例程序来模拟这个过程,探讨…

    2022年12月14日
    00
  • ? Hugging Face Datasets库:一站式数据处理工具

    嗨,大家好!在今天的文章中,我将向你介绍一个令人兴奋的Python库,它可以帮助你轻松地处理各种数据集,不论是文本、图像、音频还是其他类型的数据集。这个神奇的库就是? Hugging Face Datasets。 开篇故事 在一个…

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

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

    2024年3月22日
    00
  • 提高Python编程技巧:5个实用技巧你不容错过

    编程的魔力在于它的无限可能性。随着Python编程语言的不断演进,我们可以更加轻松地实现各种任务。在这篇文章中,我们将分享一些Python编程的实用技巧,让你的编程之旅更加高效和有趣。 合并两个字典 Python 3.5之…

    2023年10月20日
    00
  • 上传图片到微博:让你的图片闪亮微博世界

    大家好,你是否曾经想过如何轻松将图片上传到微博,与朋友们分享精彩瞬间?如果你是一位图片爱好者或经常使用微博的用户,那么这篇文章将为你揭示上传图片到微博的秘诀。无需复杂的操作,只需几步简单的操作,让你…

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

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

    2023年10月21日
    00
  • Python编程小技巧:让代码更优雅的列表推导式

    编程是一门艺术,每一行代码都像是画师的一笔,创造出数字世界的精彩画卷。作为Python程序员,我们一直在追求代码的优雅和效率,而列表推导式就是实现这一目标的得力工具。 一、列表推导式的魔力 1. 什么是列表推导…

    2023年7月30日
    00
  • Python编程入门教程:学费、学习方法与资源

    你是否曾经想过,学一门编程语言,像学习Python一样,可以让你在科技领域大展拳脚,或者在日常工作中提高效率?或者你可能听说过Python,但不确定从何开始,以及学习Python编程会花费多少钱?在这篇文章中,我们将…

    2023年10月20日
    00