14
19

More than 1 year has passed since last update.

pythonで画像のスクレイピング

Last updated at Posted at 2021-09-18

画像スクレイピング とは

簡単にいうと、
ネットから、100枚くらい推しの写真ほしいな!😍ってなったとき、一枚一枚ダウンロードしていくのは時間と手間がかかってしまう!!
プログラム書けば、一気に複数(10枚でも100枚でも)の画像をダウンロードできる!!って感じですねww

やること

  1. 画像を検索
  2. 指定ディレクトリに保存

環境

ダウンロードに使ったサイト

ダウンロードに必要なライブラリのインポート

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タグのみを表示
以下の画像のように表示される.
スクリーンショット 2021-09-19 1.01.15.png

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) # ダウンロードする写真データのurlurlを取得できているか、確認するために書いた.

ダウンロードするための関数

参考サイト

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')

スクリーンショット 2021-09-19 1.11.57.png

画像のようにurlが表示されるのでリンク先に飛んで、以下のページの文字をコピーし、上の画像の四角い枠に貼り付けてください。
スクリーンショット 2021-09-19 1.12.48.png

完了すると以下のように表示されます.

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)

スクリーンショット 2021-09-19 1.17.20.png

問題なければ画像のように表示され、画像データは次々と保存されます.

今後

このダウンロードしたデータをデータセットとしてまとめて、ディープラーニングの記事を書きます。

参考サイト

便利なチートシート

全プログラムコード

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)
14
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
19