用python下载自己在聚合图床上传的图片的一种方法

声明:我没怎么学过python,下面的代码是面向csdn编程的结果

起因是昨天聚合图床的图片链接突然有一会儿失效了,并且此前我已经用cloudflare的R2搭建了一个自己的图床,有考虑过将自己之前在聚合图床上传的图转移到自建图床里(同时存在本地备份),但是我已上传的图片也已经有快200张,纯手动一张一张下载肯定是不现实的,而且我不会用爬虫爬取,所以就有了下边的内容

我先用浏览器的检查元素功能大致看了一下,图库页面的源代码是包含了这一页所有图片的链接的,所以直接把个人图库每页都下载下来,就像这样

稍微观察一下源代码,不难看出,图片链接包含在类似这样的节点里:

<td style="width:240px" data-key="filename" class="tm-update img-tips" data-src="https://pic.imgdb.cn/item/646e2dc70d2dde577777d0ad.png" contenteditable="plaintext-only">16808348627320.png</td>

其实也就是说链接在含有属性 data-key 值为 filname 且属性 class 值为 tm-update img-tipstd 节点的 data-src 属性里。(测试代码的时候不加class限制跑出bug了,所以就多加了一条,但其实不加应该也是没问题的)

于是我去搜了python如何读取html代码以及如何通过url下载图片,然后就有了下边的代码

from bs4 import BeautifulSoup
import urllib.request
i = 0

with open('pic1.html', 'r', encoding='UTF-8') as file:
    soup = BeautifulSoup(file.read(), 'html.parser')
td_tag = soup.find_all('td', {'data-key': 'filename', 'class':'tm-update img-tips'}) # 查找所有含有属性data-key值为filname且属性class值为tm-update img-tips的td节点

for td in td_tag:
    i += 1
    img_name = td.text
    urlStr = td['data-src']
    print('src = ', urlStr)
    urllib.request.urlretrieve(urlStr, filename='./down/'+ str(i) + '_' + img_name) # 下载图片

参考:

Python在HTML内提取元素

如何在Python中解析本地HTML文件?

python3根据图片链接下载图片

posted @ 2024-05-17 02:22  RimroseLim  阅读(19)  评论(0编辑  收藏  举报