1. 程式人生 > 其它 >採集 base64 編碼的圖片

採集 base64 編碼的圖片

問題

爬蟲抓取網頁的時候,遇到有的圖片是 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

    ,瞭解它的構成對於解析很有幫助