前言

        想批量下载网页图片却嫌手动保存太麻烦?本文用 Python 带你实现自动爬取,从分析网站到代码运行,步骤清晰,新手也能快速上手,轻松搞定图片批量获取。

1.安装模块

        在开始爬取图片前,我们需要准备好工具和环境。这就像盖房子前要准备好砖瓦和工具一样,合适的环境能让后续操作更顺畅。

1.1环境安装

《Python开发环境终极指南:从Conda环境配置到VSCode、PyCharm、Jupyter深度优化》_conda系统环境配置-CSDN博客文章浏览阅读1.4k次,点赞47次,收藏31次。Jupyter Notebook允许用户在一个文档中结合代码、文字、数学公式和可视化图表,是教学、实验记录和可重复研究的理想工具。Jupyter Notebook是一种互动式的网页应用程序,让你在一个文档中写代码、运行代码、添加注释和插入图表。【菜单】---【设置】--【项目:你的项目目录】--【python解释器】--【添加解释器】--【添加本地解释器】不建议使用类似C:\Users\15740\\.conda\envs**这样的默认路径去创建虚拟环境。然后就可以创建python文件、写代码、运行即可~_conda系统环境配置 https://blog.csdn.net/xw3373409564/article/details/149201204?fromshare=blogdetail&sharetype=blogdetail&sharerId=149201204&sharerefer=PC&sharesource=xw3373409564&sharefrom=from_link这里建议使用Pycharm

1.2第三方模块与模块的调用

Python 模块化编程全解析:模块、包与第三方库管理指南-CSDN博客文章浏览阅读1.1k次,点赞30次,收藏22次。学好模块和包,是从"写脚本"到"开发项目"的关键一步。下次写代码时,试试把常用功能拆成模块——你会发现代码变得清爽又好维护! https://blog.csdn.net/xw3373409564/article/details/149452387?fromshare=blogdetail&sharetype=blogdetail&sharerId=149452387&sharerefer=PC&sharesource=xw3373409564&sharefrom=from_link

2.分析网站

        爬取图片的关键是找到图片的真实地址。就像找宝藏需要先看地图,我们需要用浏览器的 “开发者工具” 分析网站结构,找到图片的来源。

浏览器建议使用谷歌

2.1打开网页

打开一个包含图片的网页,例如:

2.2进入检查(或开发者选项)

  • 右键网页空白处,选择 “检查”(或按 F12 快捷键),打开开发者工具。
  • 这个工具就像 “透视镜”,能看到网页背后的代码和网络请求。

2.3Elements

进入如如下页面,Elements是网页的全部内容,

2.4network

  1. 切换到 Network 面板:这里记录了网页加载时的所有网络请求(如图片、文字、脚本等)。
  2. 选择 Fetch/XHR:图片数据通常通过 “异步请求” 加载,这里能过滤出我们需要的动态数据请求。
  3. 刷新网页或滑动加载:滑动网页时,新的图片会被加载,Network 面板会出现新的请求记录。

2.5Fetch/XHR

  1. 查看请求的 Preview:在 Fetch/XHR 列表中,点击一个请求,切换到 “Preview” 标签,这里能看到请求返回的数据(通常是 JSON 格式)。
  2. 寻找图片地址字段:在数据中逐层查找,会发现一个images列表,里面的thumburl字段就是图片的真实地址(试试复制这个地址到浏览器,能直接打开图片哦~)。
  3. 记录请求 URL 和参数:每个请求都有一个 URL(如https://image.baidu.com/search/acjson?...),里面的word参数是搜索关键词(如 “刘亦菲”),pn是分页参数(控制第几页),rn是每页图片数量 —— 这些参数能帮我们控制爬取的内容和数量。

选择Fetch/XHR,里面放的是各种请求

2.5.1Header

在Header中往下滑,在request headers中找到 user-agent

         user-agent;用户代理”,是一个在客户端(如浏览器、APP、爬虫程序等)向服务器发送请求时,包含在 HTTP 请求头中的字符串。它的核心作用是向服务器 “说明” 自己的身份信息,让服务器了解请求来自哪种客户端、操作系统、设备类型等,从而返回适配的内容。

        user-agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36 

2.5.2 Payload

2.5.3Preview

点击Preview 里面放的是我们请求的数据,我们需要在里面找到图片地址

        可以看出images是一个列表list 

2.5.3.1在images中找到图片地址

例如jumpUrl

结果如下

 继续往下找

结果如下 

然后换一个 继续访问看是否一致

结果如下,很显然thumburl就是我们要找的地址 ,同时从这里也可以看出每个请求里有30张图片

 2.5.4获取请求的url地址

 这样我们就获得了一个请求地址(访问不同地址不同):

https://image.baidu.com/search/acjson?tn=resultjson_com&word=%E5%88%98%E4%BA%A6%E8%8F%B2&ie=utf-8&fp=result&fr=&ala=0&applid=11719931000699796610&pn=60&rn=30&nojc=0&gsm=3c&newReq=1

3.编写爬虫代码:从请求到下载图片

        我这里使用pycharm

3.1打开pycharm

 3.2设置地址变量(url)

        设置一个变量来保存url地址,这里的地址应该是动态的,因为图片的地址不一样,后续会处理

3.2设置请求头:模拟浏览器

  • 请求头的作用User-Agent告诉网站 “我是浏览器”,避免被识别为爬虫而拒绝请求。

 3.3使用request模块发送请求

3.3.1检查是否 请求成功

3.3.2看看是否抓取到信息 

3.3.3然后查看文件类型 

 3.3.4将其转换为json

   json.loads() 是 Python 标准库 json 模块中的一个重要函数,用于将 JSON 格式的字符串转换为 Python 数据类型(如字典、列表、字符串、数字等),实现 JSON 数据的 “反序列化”,方便我们提取图片地址。。

3.4获取图片信息

        根据我们分析网页时(在分析网页模块2.5.3Preview 里面放的是我们请求的数据,我们需要一层一层的在里面找到图片地址)url地址get( )  方法获取

 3.4.1打印thumburl地址

 我们拿到图片地址就是想把它下载到本地

3.5下载图片

        创建一个用于存放图片的文件夹这里我创建的是images        

3.5.1使用request发起请求get(图片地址)

3.5.2 下载

3.5.2.1查看是否获取到图片数据
  • 二进制保存:图片是二进制文件,所以用"wb"模式(写入二进制)打开文件。

显然获取数据成功 

3.5.2.2保存图片数据

 注意:这里的地址D:\hqyj\py\周末自习\images要用  \ \,在python中 \ 是转义字符

3.5.3运行

 到这里我们就完成了简单的下载功能

4.代码优化:让爬虫更实用

4.1获取当前目录地址

结果如下: 

        D:\hqyj\py\周末自习
        D:\hqyj\py\周末自习\images

4.1.1不同方法

场景推荐方法原因
将图片保存到脚本所在目录os.path.dirname(__file__)无论脚本从何处运行,都能准确定位到脚本自身所在的目录。
将图片保存到当前工作目录os.getcwd()适用于需要与用户当前操作目录保持一致的场景(如命令行工具)。

4.1.2检测

4.2 优化下载数量

        从(2.5.2 点击Payload)中我们可以看出pn时为了设置每页起始值,而rn是每页图片张数,通过修改 URL 中的pn参数(分页起始值),实现多页爬取:如下:

注意,为了方便操作这里使用了换行符 \

由于这里做了更改,保存图片是的文件名也需更改 

然后执行看是否成功

显然是成功的 

4.3支持多关键词爬取,同时下载不同的内容

(2.5.2 点击Payload)可以发面word是用来存储我们搜索的关键词

我们可以用一个列表存储这些关键词来映射,动态获取内容

同样的我们需要对文件保存做出修改

运行看是否成功

 

 显然这是成功的两页,每页3张

4.4增加错误处理

       用try-except捕获错误,避免因个别图片地址无效导致程序崩溃:

5.源代码

import os
import requests
import json# 关键词映射
keyword = {'liuyifei': '刘亦菲','liushishi': '刘诗诗'
}
# 本地目录获取,当前文件所在目录
CURRENT_DIR = os.path.dirname(__file__)
PAGES_NUM = 2
if __name__ == '__main__':for key, word in keyword.items():# 下载图片到本地目录folder = os.path.join(CURRENT_DIR, key)if not os.path.exists(folder):os.makedirs(folder)# 遍历的方式爬取多页for page in range(PAGES_NUM):url = f'https://image.baidu.com/search/acjson?tn=resultjson_com&word={word}&ie=\utf-8&fp=result&fr=&ala=0&applid=11719931000699796610&pn={page*3}&rn=3&nojc=0&gsm=3c&newReq=1'# 设置请求头:模拟浏览器headers = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36'}# 使用request模块发送请求response = requests.get(url, headers=headers)images = json.loads(response.text).get('data').get('images')# 获取到所有的我要加载到本地的图片地址for i, img_info in enumerate(images):try:imgUrl = img_info.get('thumburl')if not imgUrl:continue  # 跳过无地址图片# 下载图片到本地# request发起请求,get(图片地址)img = requests.get(imgUrl)with open(os.path.join(folder, f'{word}{i+3*page}.jpg'), mode='wb') as f:f.write(img.content)print(f'第{page}页:{word}{i+page*3}.jpg 保存成功....')except Exception as e:print(f'第{page}页:{word}{i+page*3}.jpg 保存错误:{e}')

6总结

核心步骤回顾

  1. 分析网站:用开发者工具找到图片的请求 URL 和数据结构(关键是找到图片真实地址)。
  2. 发送请求:用requests库模拟浏览器发送请求,获取数据。
  3. 提取信息:从返回的 JSON 数据中提取图片地址。
  4. 保存数据:将图片以二进制形式保存到本地文件夹。
  5. 优化扩展:支持多页、多关键词爬取,增加错误处理。

注意事项

  • 尊重网站规则:查看网站的robots.txt(如https://image.baidu.com/robots.txt),遵守爬取限制,不要频繁请求(可以加time.sleep()控制间隔)。
  • 反爬应对:设置合理的请求头(User-Agent),避免被识别为爬虫;不要一次性爬取过多数据。
  • 合法性:确保爬取的内容用于学习,不侵犯版权或用于商业用途

        通过这篇教程,你已经掌握了 Python 爬取网页图片的基本方法。爬虫的核心是 “分析网站→模拟请求→提取数据”,多练习不同的网站(如豆瓣图片、壁纸网站),你会越来越熟练!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/89598.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/89598.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/89598.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

aspect-ratio: 1 / 1样式在部分手机浏览器中失效的问题怎么解决?

最近在uniapp开发时又遇到了安卓手机不兼容问题&#xff0c;ios系统无影响。开发背景&#xff1a;小编想通过网格布局来实现答题卡的布局&#xff0c;实现五列多行的形式。代码片段&#xff1a;<view class"question-grid"><viewv-for"(question, inde…

RecyclerView与ListView深度对比分析

1. 使用流程对比ListView: 布局XML&#xff1a; 在布局文件中放置 <ListView> 控件&#xff0c;指定 id (如 android:id"id/listView")。数据适配器 (Adapter)&#xff1a; 继承 BaseAdapter 或 ArrayAdapter / CursorAdapter / SimpleAdapter。 重写 getCount…

deepseekAI对接大模型的网页PHP源码带管理后台(可实现上传分析文件)

前端后端都已进行优化&#xff0c;新增可上传文件功能&#xff08;拖拽进去也可以&#xff09;&#xff0c;后端进行风格主题设置&#xff0c;优化数据结构&#xff01;依旧测试网站&#xff1a;iEPMS我的工具箱&#xff0c;你的智慧助手&#xff01;还是那句话兄弟们轻点搞我的…

NJU 凸优化导论(9) 对偶(II)KKT条件+变形重构

https://www.lamda.nju.edu.cn/chengq/optfall24/slides/Lecture_9.pdf 目录 关于对偶的一些解释 1. Max-min characterization 最大最小准则 2. Saddle-point Interpretation 鞍点解释 3. Game interpretation 博弈论里的对偶 Optimality Conditions 最优条件 1. Certi…

Vue Swiper组件

Vue 渐进式JavaScript 框架 基于Vue2的学习笔记 - Vue Swiper组件实现笔记 目录 Swiper组件 下载swiper 创建swiper组件 保存时修复 编写swiper内容 引入swiper 使用swiper Swiper子组件 创建Swiper列表组件 使用子组件 增加生命周期 增加图片显示 加载数据 渲染…

Linux:lvs集群技术

一.集群和分布式1.1 集群集群是为了解决某个特定问题将多台计算机组合起来形成的单个系统。即当单独一台主机无法承载现有的用户请求量&#xff1b;或者一台主机因为单一故障导致业务中断的时候&#xff0c;就可以增加服务主机数&#xff0c;这些主机在一起提供服务&#xff0c…

【管理】持续交付2.0:业务引领的DevOps-精要增订本,读书笔记(理论模型,技术架构,业务价值)

【管理】持续交付2.0&#xff1a;业务引领的DevOps-精要增订本&#xff0c;读书笔记&#xff08;理论模型&#xff0c;技术架构&#xff0c;业务价值&#xff09; 文章目录1、持续交付的理论模型&#xff08;第1-3章&#xff09;1.1 结构图1.2 持续交付的演进1.3 双环模型理论体…

Wilcox检验的星星怎么规定的?

在 R 里&#xff0c;常见的把 p 值映射为“星号”标记&#xff08;显著性水平&#xff09;的规则通常是&#xff1a;p 值范围标记p ≤ 0.0001“****”0.0001 < p ≤ 0.001“***”0.001 < p ≤ 0.01“**”0.01 < p ≤ 0.05“*”0.05 < p ≤ 0.1“.”p > 0.1…

https与DNS的运行流程

HTTPS流程&#xff1a;HTTPS核心:加了TLS层&#xff0c;加密传输身份认证TLS:信息加密、校验机制、身份证书TLS&#xff08;Transport Layer Security&#xff09;握手是建立安全通信通道的关键过程&#xff0c;发生在客户端&#xff08;如浏览器&#xff09;和服务器之间。其主…

板子 5.29--7.19

板子 5.29–7.19 目录 1. 树状数组 2. KMP 3. 矩阵快速幂 4. 数位DP 5. 状压枚举子集 6. 快速幂&#xff08;新版 7. priority_queue 8. dijkstra 9. 单调栈 10. debug内容 1. 树状数组 // 树状数组 快速求前缀和 / 前缀最大值 // 维护位置数量(离散化)...// (区间加 区间求和…

min-max容斥学习笔记

最近报了航电的春季赛&#xff0c;在一道题目里面遇到了做法&#xff0c;感觉挺有意思。 考虑一个&#xff08;多重&#xff09;集合S{ai}S\{a_i\}S{ai​}&#xff0c;有如下的等式成立 min⁡ai∈S(ai)∑T⊆S,T≠∅(−1)∣T∣−1max⁡ai∈T(ai)\min_{a_i\in S}(a_i)\sum_{T\sub…

使用帆软制作项目

https://zhuanlan.zhihu.com/p/23429318335 项目背景 为加快大数据体系建设&#xff0c;稳步推进数字化转型战略&#xff0c;规范数据架构体系和数据治理体系&#xff0c;运用大数据推进全行数字化转型建设&#xff0c;为业务发展提供创新动力&#xff0c;目标是利用金融科技和…

论C/C++的条件编译#if、#ifdef、#ifndef、#undef

我们以实例来演示&#xff1a; ------------------------------------------实验①------------------------------------------ 子函数&#xff1a;主函数&#xff1a;当定义了COMMENT_FLAG该宏&#xff0c;且其为0&#xff0c;则运行结果如下&#xff1a;只执行了sub_func_1函…

21、鸿蒙Harmony Next开发:组件导航(Navigation)

目录 设置页面显示模式 设置标题栏模式 设置菜单栏 设置工具栏 路由操作 页面跳转 页面返回 页面替换 页面删除 移动页面 参数获取 路由拦截 单例跳转 子页面 页面显示类型 页面生命周期 页面监听和查询 页面转场 关闭转场 自定义转场 共享元素转场 跨包…

“外卖大战”正在改变国内“大零售”

出品 | 何玺排版 | 叶媛7月18日&#xff0c;市场监管总局约谈美团、饿了么、京东三家外卖平台&#xff0c;要求“理性竞争、规范促销”&#xff0c;剑指近期愈演愈烈的“0元购”“0.1秒杀”等外卖补贴乱象。但约谈之后&#xff0c;平台们是真整改&#xff0c;还是玩话术&#x…

当CAN握手EtherCAT:视觉检测系统的“双芯合璧”时代来了

在汽车制造的高速生产线上&#xff0c;设备间的“语言不通”曾是工程师们的头疼事&#xff1a;CAN总线像踏实的老司机&#xff0c;稳扎稳打传输传感器数据&#xff1b;而EtherCAT网关则是追求极致速度的“闪电侠”&#xff0c;主导着实时控制的重任。当视觉检测系统需要同时对接…

【C语言】动态内存管理全解析:malloc、calloc、realloc与free的正确使用

C语言学习 动态内存分配 友情链接&#xff1a;C语言专栏 文章目录C语言学习前言&#xff1a;一、为什么要有动态内存分配二、malloc和free2.1 malloc2.2 free三、calloc和realloc3.1 calloc3.2 realloc总结附录上文链接下文链接专栏前言&#xff1a; 在C语言编程中&#xff0…

基于Arduino智能家居环境监测系统—以光照强度检测修改

2 相关技术与理论 2.1 Arduino 技术 Arduino 是一款广受欢迎的开源电子原型平台&#xff0c;由硬件和软件组成&#xff0c;为开发者提供了便捷且低成本的解决方案&#xff0c;尤其适用于快速搭建交互式电子项目&#xff0c;在本智能家居环境监测系统中担当核心角色。​ 硬件方…

前端上传 pdf 文件 ,前端自己解析出来 生成界面 然后支持编辑

要在前端解析 PDF 文件并生成可编辑界面&#xff0c;我们可以使用 PDF.js 库来解析 PDF 内容&#xff0c;然后将其转换为可编辑的 HTML 元素。 主要特点和工作原理如下&#xff1a; PDF 解析&#xff1a; 使用 Mozilla 的 PDF.js 库解析 PDF 文件内容&#xff0c;提取文本信息。…

Linux“一切皆文件“设计哲学 与 Linux文件抽象层:struct file与file_operations的架构解析

在Linux系统中&#xff0c;“一切皆文件”&#xff08;Everything is a file&#xff09;是一个核心设计哲学&#xff0c;它抽象了系统资源的访问方式&#xff0c;使得几乎所有硬件设备、进程、网络连接等都可以通过统一的文件接口&#xff08;如open()、read()、write()、clos…