今回はバイナリファイルになっている画像の取得方法について紹介したいと思います。
Google検索画面や個人サイトなどをスクレイピングをしているとたまに<img src=’ data:image/jpeg;base64:~~~~~’>みたいな、画像の引用元がhttpではないタグ引数に遭遇します。
こういう形式の場合、画像はhttpのパス形式ではないのでrequestsだと書式エラーで取得できません。というのもこれはパスではなく画像がバイナリでそのまま埋め込まれているのでrequestsを使う必要がないのです。
このようなバイナリでそのまま埋め込まれている画像を取得してjpgなどの画像ファイルにして可視化するためにはデコードする必要があります。
参考:https://techacademy.jp/magazine/28860
Pythonでバイナリファイルをデコードしてファイルに書き出す
Pythonでバイナリファイルをデコード・エンコードする際にはbase64というライブラリを使用します。
import base64
from bs4 import BeautifulSoup
import requests
r = requests.get('https://~~~~~~')
soup = BeautifulSoup(r.content, 'html_parser')
img_tag = soup.find('img') # <img src="data:image/png;base64,xxxxxxxxxxxxxxxxxxxxxxxxx", ~~~~>
# バイナリファイルをデコードして画像ファイルとして書き出す
with open('test.jpg', 'wb') as f:
f.write(base64.b64decode(img_tag.get('src').split('base64,')[1]))
参考:https://www.javadrive.jp/python/file/index4.html
参考:https://teratail.com/questions/257227

コメント