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

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

新規登録して質問してみよう
ただいま回答率
85.48%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python

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

Q&A

解決済

2回答

2760閲覧

Python スクレイピング で習得した画像を保存したい

watchdogs

総合スコア54

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python

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

0グッド

0クリップ

投稿2020/11/01 09:37

ネットから画像を取得したいのですが
エラーがでて保存ができません。
printで出力すると指定した画像のファイル名が出ますので、
習得はできてそうです。
これを保存するにはどのように書き直せば良いか教えてください。

エラー内容
img.save("./desktop")
AttributeError: 'str' object has no attribute 'save'
('str'オブジェクトには属性がありません)

Python

1# -*- coding: utf-8 -*- 2import requests 3from bs4 import BeautifulSoup 4import traceback 5from PIL import Image 6 7 8html=requests.get("URL").text 9soup = BeautifulSoup(html, 'html.parser') 10 11#習得する画像 12img = soup.find("div", id="info").find("img").get("src") 13 14#デスクトップ に保存したい うまくできない 15img.save("./desktop") 16

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

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

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

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

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

guest

回答2

0

ベストアンサー

画像の保存は以下の様に行います。
requestsを使用して、返ってきた値から.contentとし、バイナリデータを取得する事で保存が可能です。
保存はwith構文で、保存先のパスに加え、ファイル名までを指定する事で保存が可能です。

python

1import requests 2 3src = '画像URL' 4 5img = requests.get(src) 6with open('保存先のパス/保存したいファイル名.jpg', 'wb') as f: 7 f.write(img.content)

投稿2020/11/02 06:00

nto

総合スコア1438

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

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

watchdogs

2020/11/03 17:17

nto様 回答ありがとうございます。 ご指示に様に実行しているのですが上手く画像を取り込めることができません。 画像が壊れています とエラーが出ます。 どうしたら良いでしょうか。
guest

0

imgは文字列(画像のurl?)ですのでそのままでは保存できないと思いますよ。
「python url 画像 ダウンロード」とかで検索してみてください。

投稿2020/11/01 09:40

vann_2921

総合スコア190

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

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

vann_2921

2020/11/01 09:47

私はpythonは分かりませんが、エラーメッセージに答えが書いてあります。 img.save("./desktop") AttributeError: 'str' object has no attribute 'save' 日本語に直すと「str オブジェクトはsave アトリビュートを持っていません」なのでimgはstrオブジェクト(文字列)であることがわかります。 質問者さんがやっていることは"aaa.jpg"という文字列を画像として保存しているようなものです。
watchdogs

2020/11/01 10:12

vann_2921さん コメントありがとうございます。 解説ありがとうございます。 正直よく意味がわかっていませんでした。 img = soup.find("div", id="info").find("img").get("src") この表記は文字列をgetしているということになるのでしょうか。 ファイル名とか。 上記の命令文は指定した画像データをimgとして保存しているものだと思っており、 それをデスクトップに保存しようとしていました。 その認識でまずは良いですか。
vann_2921

2020/11/01 10:27

printでファイル名が表示されるということはimgにはファイル名の文字列が入っているのだと思います。 htmlとかウェブ系のことはよくわかりませんが、ファイル名だけでは画像は取得できないのではないでしょうか? 「beautifulsoup find 画像」で検索してみてください。 requests.get(ファイル名)で取れるみたいですよ。
watchdogs

2020/11/01 10:51

vann_2921さん コメントありがとうございます。 その通りでした。 現状ファイルの名前を取得しているようなので、 アドバイス通りに検索して調べてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問