採集 base64 編碼的圖片
阿新 • • 發佈:2021-12-13
問題
爬蟲抓取網頁的時候,遇到有的圖片是 base64 編碼的格式,要怎樣下載到本地呢?
示例:base64 編碼的 img
標籤
<!-- 內容太長省略一部分 -->
<img src="data:image/png;base64,/9j/4S/+RXhpZgAATU0AKgAAAAgAAAAAA...km7SSkpf/9k=">
解決方案
以上文為例,當我們解析到 src
屬性後,可以做如下處理:
>>> import base64 >>> >>> # src 屬性 >>> src 'data:image/png;base64,/9j/4S/+RXhpZgAATU0AKgAAAAgAAAAAA...km7SSkpf/9k=' >>> >>> # 提取內容部分 >>> info, b64_data = src.split('base64,', 1) >>> >>> # 提取檔案格式 >>> fmt = info.split('image/')[-1].replace(';', '') >>> >>> # 解碼內容 >>> binary_data = base64.urlsafe_b64decode(b64_data) >>> >>> # 儲存到檔案 >>> with open('this_image_was_from_base64.' + fmt, 'wb') as f: ... f.write(binary_data)
擴充套件
-
標準庫中的 base64 模組也提供了
urlsafe_b64encode
方法,可以將檔案型別的物件編碼為 base64,不過對於專注於爬蟲業務的工作者基本可以無視 -
Data URL 由
data:
字首、MIME 型別(表明資料型別)、base64 標誌位(如果是文字,則可選)以及資料本身四部分組成,如:data:[<mediatype>][;base64],data
其中,mediatype 是一個MIME(Multipurpose Internet Mail Extension)型別字串,如
image/jpeg
表示一個 JPEG 圖片檔案。如果省略,預設值為text/plain;charset=US-ASCII