python下载网页文件数字递进_119个文件夹,830张图片,15分钟,层层递进的Python爬虫实例...

本文介绍了如何使用Python爬虫批量下载相册中的所有图片,包括封装爬取图片的函数、创建文件夹、保存图片等步骤。在实际操作中遇到了因相册名称包含特殊字符导致的异常,最后通过排除或处理该问题完成了119个相册共830张图片的下载,耗时15分钟。文章适合初学者学习爬虫基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

686a29555bc84531244ac5e3eab3b17b.png

接上一篇,昨天我们把相册中的一个图片,最终根据网页地址提取了图片地址,下载了下来。今天,我们用一个for循环,把相册中的所有图片先下载下来。

一、爬取网页(一个相册)的所有照片

945de1e69f21ddc52984b8280b9b4775.png

既然是循环,肯定要多次重复的执行代码,我们先把它封装成函数,这样,结构上能够简洁点;上图是昨天的代码,对比用。

c21a8cbd6b8561cdef42dfa30166a174.png

我们结合今天的目标,来改成函数。这是主程序,第4行,图片网页地址的前缀rooturl;第8行,通过fc函数创建相册文件夹,返回图片网页地址列表urldir[0]和文件夹路径urldir[1];for循环图片网页地址列表urldir[0],调用savejpg函数把图片下载下来保存在相册文件夹里;这是和昨天代码不一样的地方。

bc5e05908d215f30c032bb1d93229d6d.png

我们先来看第一个函数fc:第3到6行,把图片的网页地址实例化;第7到9行,创建相册文件夹,连接成完整的相册文件夹路径;第10到12行,创建相册文件夹并输出;第13到14行,用xpath解析出所有的图片网页地址,并返回图片网页地址列表和文件夹名字。

5bc0f12e70cb9d8c40f7bf6b19b85549.png

再看第二个函数savejpg:第一个参数是图片网页地址,第二个是文件夹名字。第3到5行,得到完整的网页地址并输出;第6到9行,把图片的网页地址实例化;第10到11行,提取图片地址并输出;第12到14行,得到完整的图片路径并输出;第15到22行,保存图片并提示。

26283804f71cdf42b60fd8c18e7c16d9.png

记得先导入库文件。

c284addc73a981f102cb7a13aaf68af0.png

257bdbd9920be0ce0e8dedb3617f692d.png

完整代码见上图。

二、爬取所有相册的所有照片

5f06145e7c3a7b008a1cfb0ccd6fcd89.png

说下和第一部分代码有变化的地方,第3行:既然要爬取所有的相册,那url的内容就要再往上一级;第9行,又多了一个for循环。

ba5fe5b938153f8c47c25a8ac0511e98.png

该页面下有24个相册。

a43c5e35ea2397b3ee236b131bfcfa1d.png

总共有5页。

5b21bb7cf6ae7ae753c237f260a89497.png

合计120个相册。

8b7e6edbef77025bf6822ec06d4bf508.png

和第一部分相比,多了一个获取相册地址au的函数:第2到3行,url指的是某人所有相册的初始地址,空列表准备存放所有的相册地址,这也是该函数的返回值。

b1cf6b050dcb5eee95007e97af3dfdfe.png

第5行,因为有五个主页面,不同的变化在文件名最后,以数字区分,用for循环i从1到5变化,合成正确的主页面地址,记着改成字符串类型。

2ed6837b1924dd7e454097c56928b326.png

第7到11行,把当前主页面实例化;第12行,提取当前页面的24个相册地址;第13行,依次添加到之前准备的空列表里。上图是第1个主页面的所有相册地址。

b6425e875240835bfe995b9a2ee407fa.png

文件夹创建函数fc多了一个参数,毕竟第一部分的相册地址是固定,这次需要遍历120次。

b932cd8b400b736d3399c708c391503a.png

40f47bc3d7fb5dbaa6c6bf2755ef5f67.png

完整代码见上图。

三、遇到的问题

c092db989c64b96c4682c03681e96b08.png

119个文件夹,看着是不是很壮观

c603c0a9f718e2c1adbaa8fb2f87ef5f.png

爬取了830张图片,用了15分钟多。

92cd15ffbc4a9eacbb79037fa87d06d3.png

至于为什么是119个相册,是因为这个相册的名字有问题。

47e2fa2f74101379c7bafa22dc7a8ff5.png

含有系统不认可的字符。

e677d4627f06a545738faf7699ffa0a0.png

刚开始我也没搞清楚,每次都是到爬完48个相册,就不执行了;把这个相册隔过去,就正常了。

四、解决方法:

88fd3e3106788edab87048a9cc8b902b.png

我想到的有三种,1.把它隔过去;

397c3b6975b77afa32e55fdf6b7e48c5.png

2.创建一个函数,把系统不认可的字符剔除;

6987410fc2b8ce796b35790c72261245.png

3.舍弃这个相册的9张图片。

结尾

8e039cfb58360fb020d370523e566134.png

希望你能通过这两天的内容,学会爬取图片的一些基础方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值