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

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

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

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

解決済

取得した大量の画像URLから画像を取得しファイルに保存したい

ttttt08
ttttt08

総合スコア14

スクレイピング

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

1回答

0評価

0クリップ

209閲覧

投稿2022/06/30 03:15

自身が書いてるコードにて、Instagramの投稿写真の画像URLを取得しています。
また、画像の様に、それぞれの投稿URLのみだけがプリントされるように指定しました。イメージ説明
この取得した画像URLを全て指定した任意のフォルダに保存したいです。

サイトを参考にしていますが、

URL = '欲しい画像のURL' # URL入力

の文で、欲しい画像のURL単体を書き1枚画像を取得することは可能なのかなと思っているのですが、自身がやっているように、取得した大量の画像URLを一括で保存したいです。
自身のコードのどの部分が '欲しい画像のURL' に入れる部分かも分からないので教えていただきたいです。

下記のサイトを参考にしています。
http://arduinopid.web.fc2.com/R19.html
https://su-gi-rx.com/archives/976

現在書いているコードは以下のようになります。

import requests import pandas as pd import json # あらかじめID等は取得しておく instragramID = "0123456789" ACCESS_TOKEN = "ACCESS_TOKEN" # 検索したいワード query = "Castelvecchio" id_search_url = "https://graph.facebook.com/ig_hashtag_search?user_id=" + instragramID + "&q=" + query + "&access_token=" + ACCESS_TOKEN response = requests.get(id_search_url) hash_id = response.json() print(hash_id) # 検索タイプを選択 serch_type = "top_media" url = "https://graph.facebook.com/" + "17843667142027510" + "/" + serch_type + "?user_id=" + instragramID + "&q=" + query + "&access_token=" + ACCESS_TOKEN + "&fields=caption,media_type,media_url,children{media_url}&limit=50" response = requests.get(url) json_data = response.json() for b in range(3): url=json_data["paging"]["next"] response = requests.get(url) json_data = response.json() print("======================================") print("======================================") print("======================================") print("======================================") print("======================================") for i in range(len(json_data['data'])): #print(json_data['data'][i]) print(b*50+i+1) print("=======================================") if 'children' in json_data['data'][i]: #print(json_data["data"][i])#[”data”]っていうのは、取得した項目の名前(children,url...) for a in range(len(json_data["data"][i]['children']['data'])): print(json_data["data"][i]['children']['data'][a]['media_url']) else: print(json_data["data"][i]['media_url']) print("Wwwwwwwwwwwwwwwwwwwwwwwwwwwwww") print (json_data["paging"]) info = json_data df2 = pd.json_normalize(info['data']) print(df2) df2.to_csv(r"Castelvecchio.csv", mode = 'a',encoding='utf-8-sig') #①のサイトを参照。そのままコードを張り付けると指定画像2枚をデスクトップ上に保存できるが、任意のフォルダに入れる方法が分かりません。 import requests from bs4 import BeautifulSoup img_list = [] url = 'http://arduinopid.web.fc2.com/test.html' # 任意のurlを指定 url_cont = BeautifulSoup(requests.get(url).content,'lxml') # url解析 img_all = url_cont.find_all("img") # imgタグ情報を取得 for d in img_all: # imgタグ情報を一つずつ抽出 d = d.get("src") # src情報を取得 if d.startswith("http") and (d.endswith("jpg") or d.endswith("png")): img_list.append(d) # srcの末尾が.jpgか.pngの場合リストに追加 for img_data in img_list: # 画像データをファイルに保存 with open(img_data.split('/')[-1], 'wb') as f: f.write(requests.get(img_data).content) # ファイル保存 print(img_data.split('/')[-1]) # 保存ファイル名出力 #②を参照。with open('img/'~の img/ 部分を任意のフォルダパスを入れるも、Python上でokのみがプリントされるだけで、画像は1枚も保存されません。 import requests # urlを読み込むためrequestsをインポート from bs4 import BeautifulSoup # htmlを読み込むためBeautifulSoupをインポート URL = 'https://su-gi-rx.com' # URL入力 images = [] # 画像リストの配列 soup = BeautifulSoup(requests.get(URL).content,'lxml') # bsでURL内を解析 for link in soup.find_all("img"): # imgタグを取得しlinkに格納 if link.get("src").endswith(".jpg"): # imgタグ内の.jpgであるsrcタグを取得 images.append(link.get("src")) # imagesリストに格納 elif link.get("src").endswith(".png"): # imgタグ内の.pngであるsrcタグを取得 images.append(link.get("src")) # imagesリストに格納 for target in images: # imagesからtargetに入れる re = requests.get(target) with open("img/" + target.split('/')[-1], 'wb') as f: # imgフォルダに格納 f.write(re.content) # .contentにて画像データとして書き込む print("ok") # 確認

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

nto

2022/06/30 03:33

この質問はコードの純粋にURLの取得方法の知見を得たいという旨での質問でしょうか? それともただ保存ができればいいからそのコードを提示して欲しいという旨の質問でしょうか?
ttttt08

2022/06/30 04:19

スクレイピングで画像を取得するコード含め、Python自体の知識も浅いので知見を得たいというのはもちろんありますが、自分で進めれるのか不安なためコードも提示していただけると幸いです。
ttttt08

2022/06/30 04:57

知りませんでした。教えていただきありがとうございます。 現在、論文でInstagram投稿写真を利用しようと思い、自身でデータ取得できないものかと試行錯誤しておりました。 一日200件程度画像URLを取得し、画像を収集したいなと考えていたのですが、そもそもこの行為が禁止されているという認識で合っていますでしょうか。 それとも、スクレイピング以外の方法?でコードを書いて画像収集することは可能なのでしょうか?
meg_

2022/06/30 11:00

> 論文でInstagram投稿写真を利用しようと思い 知的財産権の問題もありそうですね。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

スクレイピング

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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