宣告:我沒怎麼學過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) # 下載圖片
參考:
Python在HTML內提取元素
如何在Python中解析本地HTML檔案?
python3根據圖片連結下載圖片