用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-tips
的 td
节点的 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) # 下载图片
参考: