画像スクレイピング とは
簡単にいうと、
ネットから、100枚くらい推しの写真ほしいな!😍ってなったとき、一枚一枚ダウンロードしていくのは時間と手間がかかってしまう!!
プログラム書けば、一気に複数(10枚でも100枚でも)の画像をダウンロードできる!!って感じですねww
やること
- 画像を検索
- 指定ディレクトリに保存
環境
- 今回は、google colaboratoryを使って、google driveに画像データを保存します。
ダウンロードに使ったサイト
ダウンロードに必要なライブラリのインポート
import requests
from bs4 import BeautifulSoup
画像を検索してurlをコピー
page_url = '#'
#の部分に検索した画像のURLを貼ります。
# 検索ページurl
page_url = 'URL'
検索したサイトの情報を取得
r = requests.get(page_url)
soup = BeautifulSoup(r.text)
# soup.find_all("img")
soup.find_all('img')
で取得したデータからimgタグ
のみを表示
以下の画像のように表示される.
urlのみを取得する
imgタグからurlのみを取得する
img_tags = soup.find_all("img")
img_urls = []
for img_tag in img_tags:
url = img_tag.get("src")
if url != None:
img_urls.append(url)
# print(img_urls) # ダウンロードする写真データのurl
# print(img_urls) # ダウンロードする写真データのurl
urlを取得できているか、確認するために書いた.
ダウンロードするための関数
参考サイト
def download_image(url, file_path):
r = requests.get(url, stream=True)
if r.status_code == 200:
with open(file_path, "wb") as f:
f.write(r.content)
保存先の指定
ライブラリをインポートして、マウントします。(google colaboratoryを使用している場合)
# ダウンロード先ファイルの参照(google drive用)
import os
from google.colab import drive
drive.mount('./gdrive')
画像のようにurlが表示されるのでリンク先に飛んで、以下のページの文字をコピーし、上の画像の四角い枠に貼り付けてください。
完了すると以下のように表示されます.
Mounted at ./gdrive
ダウンロードのパスを指定します。
google_drive_save_dir = "./gdrive/My Drive/ここから先は自分で決める" # ダウンロード先の指定
ダウンロード
画像データが多いのでファイル名を数字で管理する.
for index, url in enumerate(img_urls):
file_name = "{}.jpg".format(index)
ダウンロード開始↓
print(file_name)
image_path = os.path.join(google_drive_save_dir, file_name)
print(image_path)
download_image(url=url, file_path=image_path)
問題なければ画像のように表示され、画像データは次々と保存されます.
今後
このダウンロードしたデータをデータセットとしてまとめて、ディープラーニングの記事を書きます。
参考サイト
便利なチートシート
全プログラムコード
import requests
from bs4 import BeautifulSoup
page_url = 'URL'
r = requests.get(page_url)
soup = BeautifulSoup(r.text)
img_tags = soup.find_all("img")
img_urls = []
for img_tag in img_tags:
url = img_tag.get("src")
if url != None:
img_urls.append(url)
def download_image(url, file_path):
r = requests.get(url, stream=True)
if r.status_code == 200:
with open(file_path, "wb") as f:
f.write(r.content)
# ダウンロード先ファイルの参照(google drive用)
import os
from google.colab import drive
drive.mount('./gdrive')
google_drive_save_dir = "./gdrive/My Drive/ここから先は自分で決める" # ダウンロード先の指定
for index, url in enumerate(img_urls):
file_name = "{}.jpg".format(index)
print(file_name)
image_path = os.path.join(google_drive_save_dir, file_name)
print(image_path)
download_image(url=url, file_path=image_path)