Python で Google 画像をスクレイピングしてダウンロードする

公開: 2023-01-02

Webスクレイピングの普及により、その使用範囲が大幅に拡大しています。 現在、多くの AI アプリケーションは、Web スクレイピング データセットに最新のデータを定期的に提供しています。 ターゲット Web サイトから人工知能アプリケーションのデータ セットへの定期的かつ中断のないデータ フローがあります。

関連記事:人工知能がカスタマーサクセスの未来に与える影響

画像処理は、人工知能アプリケーションで最も人気のある分野の 1 つです。 画像処理は、コンピュータが画像やビデオ内の物体や人物を識別して理解できるようにすることに重点を置いたコンピュータ サイエンスの分野です。 他の種類の人工知能と同様に、画像処理は人間の能力を再現するタスクを実行および自動化することを目的としています。 この場合、画像処理は、人々の見方と意味を理解する方法の両方をコピーしようとします。

多くの分野、特に画像処理プロジェクトでアルゴリズムの開発とエラー マージンの削減に必要なデータは、Web スクレイピングによって取得されます。 この記事では、画像処理プロジェクトで頻繁に使用されるアプリケーションを開発します。 Google 画像を Python プログラミング言語でスクレイピングしてダウンロードします。 それでは始めましょう。

プロジェクトのセットアップ

まずはデスクトップ上のフォルダを開いてみましょう。 このファイル パスでターミナルを開き、以下のコマンドを実行して必要なライブラリをインストールしましょう。

pip インストール要求 bs4

必要なライブラリをインストールしたら、そのフォルダに「index.py」という名前のファイルを作成しましょう。

コード

作成した「index.py」ファイルに次のコードを貼り付けましょう。

リクエストのインポート、re、json、urllib.request
from bs4 import BeautifulSoupheaders = {
「User-Agent」: 「Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML、Gecko など) Chrome/103.0.5060.114 Safari/537.36」
}queryParameters = {“q”: “驚異”, “tbm”: “isch”, “hl”: “en”, “gl”: “us”, “ijn”: “0” }

target_image_path = “.isv-r.PNCib.MSM1fd.BUooTd”
targetted_image_base_html_path = “.VFACy.kGQAp.sMi44c.lNHeqe.WGvvNb”

html = requests.get(“https://www.google.com/search”, params=queryParameters, headers=headers, timeout=30)
スープ = BeautifulSoup(html.text, “lxml”)

google_images = []

デフスクレイプ_アンド_ダウンロード_google_images():

images_data_in_json = convert_image_to_json()

Matched_image_data = re.findall(r'\”b-GRID_STATE0\”(.*)sideChannel:\s?{}}', images_data_in_json)

removed_matched_thumbnails = remove_matched_get_thumbnails(matched_google_image_data=matched_image_data)

一致した解像度の画像 = re.findall(r”(?:'|,),\[\”(https:|http.*?)\”,\d+,\d+\]”, removed_matched_thumbnails)

full_resolution_images = get_resolution_image(matched_resolution_images=matched_resolution_images)

インデックスの場合は、(image_data, image_link) in enumerate(zip(soup.select(target_image_path), full_resolution_images), start=1):

append_image_to_list(image_data=image_data, image_link=image_link)

print(f'{index}.画像のダウンロードを開始しました')

ダウンロード画像(画像リンク=画像リンク, インデックス=インデックス)

print(f'{index}.画像のダウンロードに成功しました')

print(f'スクレイピングおよびダウンロードした画像: {google_images}')

def remove_matched_get_thumbnails(matched_google_image_data):
re.sub( を返す
r'\[\”(https\:\/\/encrypted-tbn0\.gstatic\.com\/images\?.*?)\”,\d+,\d+\]', “”, str(matched_google_image_data )))

def get_resolution_image (matched_resolution_images):
戻る [
bytes(bytes(img, "ascii").decode("unicode-escape"), "ascii").decode("unicode-escape") for img in matching_resolution_images
]

def convert_image_to_json():
all_script_tags = soap.select(“スクリプト”)
images_data = "".join(re.findall(r"AF_initDataCallback\(([^<]+)\);", str(all_script_tags)))
fixed_images_data = json.dumps(images_data)
json.loads(fixed_images_data) を返す

def append_image_to_list(image_data, image_link):
google_images.append({
“画像タイトル”: image_data.select_one(targetted_image_base_html_path)[“タイトル”],
“image_source_link”: image_data.select_one(targetted_image_base_html_path)[“href”],
「画像リンク」:画像リンク
}))

def download_image (画像リンク、インデックス):
opener=urllib.request.build_opener()
opener.addheaders=[('User-Agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (Gecko のような KHTML) Chrome/101.0.4951.54 Safari/537.36')]
urllib.request.install_opener(オープナー)
urllib.request.urlretrieve(image_link, f'Scraped_Images/Image_{index}.jpg')

Scrape_and_download_google_images()

コードを調べる場合は、まず静的な値を持つフィールドを見てみましょう。 次のフィールドは、静的な値として定義されています。 スクレイピングしてダウンロードする画像の名前とプロパティを queryParams 変数で指定します。

また読む: ChatGPT – ビジネスへの影響

ヘッダー = {
「User-Agent」: 「Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML、Gecko など) Chrome/103.0.5060.114 Safari/537.36」
}queryParameters = {“q”: “marvel”, “tbm”: “isch”, “hl”: “en”, “gl”: “us”, “ijn”: “0” }target_image_path = “.isv- r.PNCib.MSM1fd.BUooTd」
targets_image_base_html_path = “.VFACy.kGQAp.sMi44c.lNHeqe.WGvvNb”

html = requests.get(“https://www.google.com/search”, params=queryParameters, headers=headers, timeout=30)
スープ = BeautifulSoup(html.text, “lxml”)

google_images = []

ストリームが開始される場所は、 scrape_and_download_google_images()メソッドです。 対象の画像がスクレイピングされ、指定したフォルダーにダウンロードされます。

デフスクレイプ_アンド_ダウンロード_google_images():

images_data_in_json = convert_image_to_json()

Matched_image_data = re.findall(r'\”b-GRID_STATE0\”(.*)sideChannel:\s?{}}', images_data_in_json)

removed_matched_thumbnails = remove_matched_get_thumbnails(matched_google_image_data=matched_image_data)

一致した解像度の画像 = re.findall(r”(?:'|,),\[\”(https:|http.*?)\”,\d+,\d+\]”, removed_matched_thumbnails)

full_resolution_images = get_resolution_image(matched_resolution_images=matched_resolution_images)

インデックスの場合は、(image_data, image_link) in enumerate(zip(soup.select(target_image_path), full_resolution_images), start=1):

append_image_to_list(image_data=image_data, image_link=image_link)

print(f'{index}.画像のダウンロードを開始しました')

ダウンロード画像(画像リンク=画像リンク, インデックス=インデックス)

print(f'{index}.画像のダウンロードに成功しました')

print(f'スクレイピングおよびダウンロードした画像: {google_images}')

スクレイピングした画像をフォルダーにダウンロードするには、download_image(image_link=image_link, index=index) メソッドを使用します。 この方法でスクレイピングされた画像は、以前にプロジェクトのファイルの場所に追加した「Scraped_Images」に保存されます。

注: アプリケーションを実行する前に、プロジェクト構造に「Scraped_Images」フォルダーを作成します。

def download_image (画像リンク、インデックス):
opener=urllib.request.build_opener()
opener.addheaders=[('User-Agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (Gecko のような KHTML) Chrome/101.0.4951.54 Safari/537.36')]
urllib.request.install_opener(オープナー)
urllib.request.urlretrieve(image_link, f'Scraped_Images/Image_{index}.jpg')

また読む:ビジネス向けのサービスとしてのブロックチェーンのアプリケーションと利点は何ですか?

走る

アプリケーションを実行するには、ファイルの場所でターミナルを開き、次のコマンドを実行します。

python index.py

アプリケーションの実行後、次の情報がアプリケーションのコンソールに出力されます。

1.画像のダウンロード開始
1. イメージが正常にダウンロードされました
2.画像​​のダウンロード開始
2. イメージが正常にダウンロードされました
3. 画像のダウンロード開始
3. イメージが正常にダウンロードされました
4.画像のダウンロード開始
4. イメージが正常にダウンロードされました
5.画像のダウンロード開始
5. イメージが正常にダウンロードされました
6.画像のダウンロード開始
6. イメージが正常にダウンロードされました
7.画像のダウンロード開始
7. イメージが正常にダウンロードされました
[…]
48. 画像のダウンロード開始
48. 画像が正常にダウンロードされましたスクレイピングされてダウンロードされた画像:
[
{
'image_title': 'マーベルコミック – ウィキペディア',
'image_source_link': 'https://en.wikipedia.org/wiki/Marvel_Comics',
'image_link': 'https://upload.wikimedia.org/wikipedia/commons/thumb/b/b9/Marvel_Logo.svg/1200px-Marvel_Logo.svg.png'
}、
{
'image_title': 'マーベル ユニバース – ウィキペディア',
'image_source_link': 'https://en.wikipedia.org/wiki/Marvel_Universe',
'image_link': 'https://upload.wikimedia.org/wikipedia/en/1/19/Marvel_Universe_%28Civil_War%29.jpg'
}、
{
'image_title': 'Marvel.com | マーベル映画、キャラクター、コミック、テレビの公式サイト',
'image_source_link': 'https://www.marvel.com/',
'image_link': 'https://i.annihil.us/u/prod/marvel/images/OpenGraph-TW-1200×630.jpg'
}、
{
'image_title': 'マーベル エンターテイメント – YouTube',
'image_source_link': 'https://www.youtube.com/c/marvel',
'image_link': 'https://yt3.ggpht.com/fGvQjp1vAT1R4bAKTFLaSbdsfdYFDwAzVjeRVQeikH22bvHWsGULZdwIkpZXktcXZc5gFJuA3w=s900-ck-c0x00ffffff-no-rj'
}、
{
'image_title': 'マーベルの映画と番組 | ディズニー+」、
'image_source_link': 'https://www.disneyplus.com/brand/marvel',
'image_link': 'https://prod-ripcut-delivery.disney-plus.net/v1/variant/disney/DA2E198288BFCA56AB53340211B38DE7134E40E4521EDCAFE6FFB8CD69250DE9/scale?width=2880&aspectRatio=1.78&format=jpeg'
}、
{
'image_title': '初心者のためのマーベル入門 | 有線',
'image_source_link': 'https://www.wired.com/2012/03/an-intro-to-marvel-for-newbies/',
'image_link': 'https://media.wired.com/photos/5955ceabcbd9b77a41915cf6/master/pass/marvel-characters.jpg'
}、
{
'image_title': 'すべてのマーベル映画をストーリー順に見る方法 – パレード: エンターテイメント、レシピ、健康、生活、休日',
'image_source_link': 'https://parade.com/1009863/alexandra-hurtado/marvel-movies-order/',
'image_link': 'https://parade.com/.image/t_share/MTkwNTgxMjkxNjk3NDQ4ODI4/marveldisney.jpg'
}、
{
'image_title': 'マーベル コミック | 歴史、登場人物、事実、映画 | ブリタニカ」、
'image_source_link': 'https://www.britannica.com/topic/Marvel-Comics',
'image_link': 'https://cdn.britannica.com/62/182362-050-BD31B42D/Scarlett-Johansson-Black-Widow-Chris-Hemsworth-Thor.jpg'
}、
{
'image_title': 'キャプテン・マーベル (2019) – IMDb',
'image_source_link': 'https://www.imdb.com/title/tt4154664/',
'image_link': 'https://m.media-amazon.com/images/M/MV5BMTE0YWFmOTMtYTU2ZS00ZTIxLWE3OTEtYTNiYzBkZjViZThiXkEyXkFqcGdeQXVyODMzMzQ4OTI@._V1_FMjpg_UX1000_.jpg'
}、
[…]
]

ダウンロードした画像を確認するために「Scraped_Images」ファイルを見てみましょう。

Scraped Images

また読む:企業の種類とスタートアップビジネスを組み込む方法

結論

何らかの理由で必要になった Google Images のスクレイピングとダウンロードを Python で行いました。 コードを記述せずに必要な画像を Google から取得したい場合は、Zenserp API を調べてください。 これは、常に更新されている強力で素晴らしいドキュメントです。