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

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

ただいまの
回答率

88.32%

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 444

yukicb

score 21

前提・実現したいこと

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

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

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

(base) namenoMacBook-ea:~ name$ 

該当のソースコード

from bs4 import BeautifulSoup
import requests
import urllib
import lxml
import time

html="https://www.ymori.com/books/python2nen/test2.html"
load_html=requests.get(html)

soup=BeautifulSoup(load_html.text,"lxml")
imgs=soup.find_all("img")

for i in range(len(imgs)):
    filename="{}.jpg".format(i)
    urllib.request.urlretrieve(imgs[i]["src"],filename)
    time.sleep(1)
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • meg_

    2020/03/09 00:13

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

    キャンセル

  • meg_

    2020/03/09 00:18

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

    キャンセル

  • yukicb

    2020/03/09 18:28 編集

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

    キャンセル

回答 1

checkベストアンサー

0

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/03/09 18: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

    キャンセル

  • 2020/03/09 18: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

    キャンセル

  • 2020/03/09 18:49

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

    キャンセル

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

  • ただいまの回答率 88.32%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る