Python从指定网页上下载所有图片到本地存储路径(PyCharm实现)

news/2024/7/19 12:33:01 标签: python, 开发语言, 爬虫

运行前需要准备必要的包,`requests` 用于发起 HTTP 请求,`BeautifulSoup` 来自 bs4 用于解析 HTML,`urljoin` 来自 urllib.parse 用于拼接 URL,以及 `urlretrieve` 来自 urllib.request 用于下载文件。

python">import os
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin
from urllib.request import urlretrieve

先定义 download_images 函数,接受 url(包含图片的网页的URL)和 save_dir(保存图像的目录)这两个参数,再检查指定的目录 save_dir 是否不存在,如果不存在,则使用os.makedirs(save_dir) 创建该目录。用 requests.get(url) 发送 HTTP GET 请求到 url 变量中指定的 URL。用 response.raise_for_status() 来检查请求是否成功,否则会引发异常。用 BeautifulSoup 和 html.parser 这个解析器来解析响应内容。用 soup.find_all('img') 找到 HTML 内容中的所有图像标签。

python">def download_images(url, save_dir):
    if not os.path.exists(save_dir):
        os.makedirs(save_dir)
    response = requests.get(url)#发送http请求
    response.raise_for_status()  # 如果请求失败,抛出异常
    soup = BeautifulSoup(response.text, 'html.parser')#解析界面
    image_links = soup.find_all('img')

在函数中遍历找到的每个图像标签,并提取包含图像 URL 的 src 属性。如果图像 URL 是相对路径,则使用 urljoin(url, img_url) 将其转换为绝对 URL。图像名称通过提取 URL 的最后一部分(img_url.split('/')[-1])并与保存目录路径连接而确定,使用 os.path.join、urlretrieve(img_url, img_name) 从 URL 下载图像,并将其保存到指定目录。

python">    for img in image_links:
        img_url = img.get('src')
        if not img_url.startswith(('http://','https://')):#相对转绝对路径
            img_url = urljoin(url, img_url)
        img_name = os.path.join(save_dir, img_url.split('/')[-1])
        urlretrieve(img_url, img_name)
        print(f"Downloaded: {img_name}")

最后用实际要从中提取图像的网页的 URL 和要保存图像的目录路径替换占位符 `"https://"` 和 `"D:\"`。

总代码如下:

python">import os
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin
from urllib.request import urlretrieve

def download_images(url, save_dir):
    if not os.path.exists(save_dir):
        os.makedirs(save_dir)
    response = requests.get(url)#发送http请求
    response.raise_for_status()  # 如果请求失败,抛出异常
    soup = BeautifulSoup(response.text, 'html.parser')#解析界面
    image_links = soup.find_all('img')
    for img in image_links:
        img_url = img.get('src')
        if not img_url.startswith(('http://','https://')):#相对转绝对路径
            img_url = urljoin(url, img_url)
        img_name = os.path.join(save_dir, img_url.split('/')[-1])
        urlretrieve(img_url, img_name)
        print(f"Downloaded: {img_name}")

url = "https://"#你要爬取的网页
save_dir = "D:\"#存储路径
download_images(url, save_dir)

http://www.niftyadmin.cn/n/5412355.html

相关文章

【MySQL】数据库设计

目录 数据库设计基本任务 软件项目开发周期中数据库设计数据库设计的基本步骤解释需求分析需求分析的三个步骤:1.需求调查:2.分析数据字典内容定义数据的方法案例 3. 评审 概念结构设计概念模型概念结构设计E-R图概念模型组成元素:关系解释案例分析 逻辑…

Python小白福利之enumerate函数

enumerate函数用于遍历序列中的元素以及它们的下标。 enumerate函数说明: 函数原型:enumerate(sequence, [start0]) 功能:将可循环序列sequence以start开始分别列出序列数据和数据下标 即对一个可遍历的数据对象(如列表、元组或字符串)&a…

PolarDB for PostgreSQL-概述

阿里云数据库的概述 本篇罗列了一些知识点和结构。 日志 2. 同步复制:下降20% 异步复制:数据丢失风险, 部署 1.示例: vim polarx.toml 1.测试主库和备库数据一致性 备库是否一致性读 一个节点荡掉,提供服务。 GMS CN…

力扣515. 在每个树行中找最大值(BFS,DFS)

Problem: 515. 在每个树行中找最大值 文章目录 题目描述思路复杂度Code 题目描述 思路 思路1:BFS 套用BFS模板,直接在遍历树的某一层时将当前层的最大值存入数组中 思路2:DFS 回溯思想,在递归时不断更新可选列表(根据…

【AIGC】Stable Diffusion的建模思想、训练预测方式快速

在这篇博客中,将会用机器学习入门级描述,来介绍Stable Diffusion的关键原理。目前,网络上的使用教程非常多,本篇中不会介绍如何部署、使用或者微调SD模型。也会尽量精简语言,无公式推导,旨在理解思想。让有…

直接修改zynq petalinux编译出来的rootfs.cpio.gz文件内容

xilinx zynq petalinux 默认编译打包出的SPI flash烧写启动文件是BOOT.BIN,然而每次需要修改rootfs内的文件时都要重新build rootfs 然后再 package一次才能生成新的BOOT.bin文件,地球人都知道petalinux编译一次是很耗时间的,那么有没有什么简…

Spring——Bean的作用域

bean的作用域 Bean Scope Scope说明singleton(默认情况下)为每个Spring IoC容器将单个Bean定义的Scope扩大到单个对象实例。prototype将单个Bean定义的Scope扩大到任何数量的对象实例。session将单个Bean定义的Scope扩大到一个HTTP Session 的生命周期…

UKP3D和AutoPDMS选择支吊架点修改颜色的方法

Q:(UKP3D)咱们的管道和管道上的支吊架能用不同颜色显示吗? (北京老用户反馈:管道支吊架和支吊架点同一个颜色的话,看不清楚;一些管道上的支吊架点特别多,有时候100个点,要是每个点选…