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

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

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

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

Q&A

解決済

1回答

1933閲覧

URLからの画像取得(保存)処理がうまく行かないことへのご相談

yukicb

総合スコア21

Python

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

0グッド

0クリップ

投稿2020/03/08 07:44

編集2020/03/08 14:03

前提・実現したいこと

下記より、URLより画像を取得し、保存するという処理をさせたいなかで、エラーが出ている訳ではないのですが、画像が保存されていない状態となります。(名前検索をしても出てこない、)

コードをご確認いただき、原因がお分かりの方がおられましたらご教示いただけますと幸いです。

発生している問題・エラーメッセージ

(base) namenoMacBook-ea:~ name$

該当のソースコード

Python

1from bs4 import BeautifulSoup 2import requests 3import urllib 4import lxml 5import time 6 7html="https://www.ymori.com/books/python2nen/test2.html" 8load_html=requests.get(html) 9 10soup=BeautifulSoup(load_html.text,"lxml") 11imgs=soup.find_all("img") 12 13for i in range(len(imgs)): 14 filename="{}.jpg".format(i) 15 urllib.request.urlretrieve(imgs[i]["src"],filename) 16 time.sleep(1)

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

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

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

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

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

can110

2020/03/08 07:59

提示コードが正常に動作するURLは存在しますか? また、find_all("jpg")はどのような処理、結果を意図していますか?
yukicb

2020/03/08 08:10

提示コードが正常に動作するURLは存在しますか? >は「html="https://www.google.com/search?q=%E3%82%AC%E3%83%83%E3%82%AD%E3%83%BC&sxsrf=ALeKk039Fc4fYJucUMyP_1-UO2ILhAXkOA:1583647203991&source=lnms&tbm=isch&sa=X&ved=2ahUKEwiulqzImYroAhUYfnAKHQV5CzoQ_AUoAXoECCwQAw&biw=1440&bih=789"」のことでしょうか? こちらの場合は、正常に動作しております! find_all("jpg")はどのような処理、結果を意図していますか? >こちらは"img"の誤りでした、、ここからsrc情報を取得する流れを考えておりました!
meg_

2020/03/08 12:18

質問のコードを修正してください。
yukicb

2020/03/08 12:22

失礼いたしました。 上記、ただ今(“jpg”)→(“img”)へ修正いたしました。
meg_

2020/03/08 12:30

今気が付きました。対象サイトがgoogleですがスクレイピング禁止かと思います。 「本サービスの妨害や、Google が提供するインターフェースおよび手順以外の方法による本サービスへのアクセスを試みてはなりません」※利用規約からの抜粋
yukicb

2020/03/08 14:05

ありがとうございます! 上記も踏まえ、読み取り先を(以前勉強本で利用されていた)「https://www.ymori.com/books/python2nen/test2.html」に修正して実行したのですが、返答(発生している問題・エラーメッセージ)は同様に保存はされておりませんでした。 ご指摘いただいた点以外でも問題があるのでしょうか、、 ※上記より、質問のコードも修正を行いました お手数ですが、何卒宜しくお願い致します。
meg_

2020/03/08 15:13

質問のコードを試したところ「ValueError: unknown url type: './sample2.png'」のエラーが出ました。質問者さんの方ではこのエラーは出ませんか?
meg_

2020/03/08 15:18

エラーが出たのでURLをこの質問のページに設定したところ、10個のjpgファイルが作成されました。ファイルはカレントディレクトリに保存されると思いますが、本当にjpgファイルはありませんでしたか?
yukicb

2020/03/09 09:48 編集

有難う御座います! 1つ目に関して、僕の確認ミスで、同様に下記エラーが表示されました。 申し訳ございません、、 「ValueError: unknown url type: './sample2.png'」 meg_さん同様に、こちらのサイトで試すと画像取得ができたので、下記Y.H.さんにご指摘いただいたように3枚中2,3枚目の相対パスのみで記載されている部分がエラーになっていたのだと思います、! こちらの調整にて無事画像保存が可能となりました! ご対応のほど、有難う御座いました!????‍♂️
guest

回答1

0

ベストアンサー

単純にimgs[i]["src"]の値が相対Pathで記述されている場合にダウンロードできないだけでは?
urllib.request.urlretrieve()に渡すときに、http://, https:// から始まるURL形式に編集して渡せば問題ないと思います。

投稿2020/03/09 01:40

Y.H.

総合スコア7918

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

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

yukicb

2020/03/09 08:21

ありがとうございます! 大変お手数なのですが、上記コードを「http://もしくはhttps://」から始まるURL形式に編集して渡す処理に修正する場合、どのようなコードになるか、参考までにご教示いただくことは可能でしょうか? 色々調べ、試してみたのですが上手くいかずご相談させていただきました、、 何卒宜しくお願い致します。
yukicb

2020/03/09 09:23

有難う御座います! 早速試したのですが、下記にてエラーが表示されました。 指定URLに3つの画像があるうち、1つ目のみ絶対パス・2,3つ目のみ相対パスになっていることが原因でしょうか? Traceback (most recent call last): File "/Users/name/Desktop/python/gazousyutoku.py", line 15, in <module> urllib.request.urlretrieve("https://www.ymori.com/books/python2nen/" + imgs[i]["src"],filename) File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/urllib/request.py", line 247, in urlretrieve with contextlib.closing(urlopen(url, data)) as fp: File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/urllib/request.py", line 222, in urlopen return opener.open(url, data, timeout) File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/urllib/request.py", line 531, in open response = meth(req, response) File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/urllib/request.py", line 640, in http_response response = self.parent.error( File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/urllib/request.py", line 569, in error return self._call_chain(*args) File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/urllib/request.py", line 502, in _call_chain result = func(*args) File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/urllib/request.py", line 649, in http_error_default raise HTTPError(req.full_url, code, msg, hdrs, fp) urllib.error.HTTPError: HTTP Error 404: Not Found
Y.H.

2020/03/09 09:32

src属性の指定の仕方は以下のように様々ありますので 先頭から足りない部分をくっつけてください。 最終的に、http://, https://から始まるURLの文字列を作成してurlretrieve()に渡してください。 https://www.ymori.com/books/python2nen/hoge.png //www.ymori.com/books/python2nen/hoge.png /books/python2nen/hoge.png ./hoge.png hoge.png
yukicb

2020/03/09 09:49

上記にて調整を行った所、2,3枚目も保存することができました! お忙しい中ありがとうございました!!????‍♂️
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問