質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

解決済

1回答

3287閲覧

スクレイピングで取得した画像に、名前を付けて保存する方法について

dd_

総合スコア111

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

0グッド

0クリップ

投稿2021/08/20 10:02

編集2021/08/20 10:09

いくつか検索ワードを用意し
yahoo画像検索で検索された
一枚目の画像を取得し保存したいと思い
下の様なコードを書いてみました。

参考にしたものは
selenium 画像 保存
selenium スクレイピング
selenium yahoo 画像
とかでググって出てきたサイトや動画を参考にして
作業を進めてみました。

python

1 2from selenium import webdriver 3from selenium.webdriver.chrome.options import Options 4import io 5from urllib import request 6from PIL import Image 7import requests 8 9fruits = ["リンゴ", "バナナ", "イチゴ"] 10 11chrome_path = r"C:\Users\81809\Downloads\chromedriver_win32\chromedriver.exe" 12 13options = Options() 14options.add_argument("--headless") 15 16driver = webdriver.Chrome(executable_path = chrome_path, options = options) 17 18 19url = "https://search.yahoo.co.jp/image" 20 21for query in fruits: 22 driver.get(url) 23 search_box = driver.find_element_by_class_name( 24 "SearchBox__searchInput") 25 search_box.send_keys(query) 26 search_box.submit() 27 28 get_class = driver.find_element_by_css_selector( 29 ".sw-Thumbnail__innerImage.sw-Thumbnail__innerImage--width.rapidnofollow") 30 elem = get_class.find_element_by_tag_name('img') 31 urls = elem.get_attribute('src') 32 print(urls)

このコードで実行すると画像のURLは取得できました。
ターミナル内の画像のURLをクリックすると
取得したい画像がブラウザで表示されます。

次に保存したいという事で
保存のやり方はこちらのサイト参照しました。
https://programming-beginner-zeroichi.jp/articles/73

python

1for url in urls: 2 re = requests.get(url) 3 with open(r'C:\Users\81809\OneDrive\Desktop\b\img' + url.split('/')[-1], 'wb') as f: # imgフォルダに格納 4 # .contentで画像データとして書き込む 5 f.write(re.content)

実行すると

requests.exceptions.MissingSchema: Invalid URL 'h': No schema supplied. Perhaps you meant http://h?

こう出ます。
そして、上のコードを合わせて実行してみましたが
フォルダには当然何も入っていませんでした。

他に

こんなコードも試してみました。

python

1for url in urls: 2 f = io.BytesIO(request.urlopen(url).read()) 3 img = Image.open(f) 4 img.save('./img{}.png'.format(i) for i in range(len(urls)))

このコードは調べて自分なりに書いたもので

こちらを実行すると

raise ValueError("unknown url type: %r" % self.full_url) ValueError: unknown url type: 'h'

と出ます。

エラーの内容を調べたりしましたが
いまいちどこを改善すればよいか
分かりませんでした。

取得した画像をimg.pngフォルダに保存する方法を
教えて頂けませんでしょうか?
よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

requests.getで、URLとして指定した物がURLの形をしていない(hという文字列)というエラーです。
どこからおかしくなっているのか、内容を確認しましょう。

おそらくは、for url in urls:urlsがURL文字列のリストじゃなくて、URL文字列なんじゃないですか?
文字列をforに与えると1文字ずつ分解します。

投稿2021/08/20 10:16

編集2021/08/20 10:38
otn

総合スコア85901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dd_

2021/08/20 10:24

いつもご回答ありがとうございます。 requests.getで指定したURLが画像のURLで指定できてないことがわかりました。
otn

2021/08/20 10:40

サイトのバグで表示が途中で切れてたので対応しました。 この数年越しのバグ、いつ直るんだろう?
dd_

2021/08/20 10:55

途切れてしまってたんですね、、 ご対応ありがとうございます! 取得した画像のURLをエリストに入れてやってみました。 できました! ひとまずは画像をファイルをとして保存できました。 教えて頂きありがとうございます!
otn

2021/08/20 12:11

> urls = elem.get_attribute('src') と、単数のものを入れる変数名に複数形を使ったことが間違いの元ですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問