Beautiful Soup Python スクレイピング

【Python】imgタグにバイナリでデータが埋め込まれている画像ファイルをスクレイピングする

この記事は約3分で読めます。

 

 

今回はバイナリファイルになっている画像の取得方法について紹介したいと思います。

 

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

 

 

 

 

 

 

コメント

タイトルとURLをコピーしました