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

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

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

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

Python 3.x

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

Python

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

Q&A

解決済

1回答

543閲覧

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

ttttt08

総合スコア17

スクレイピング

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

Python 3.x

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

Python

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

0グッド

0クリップ

投稿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") # 確認

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

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

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

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

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

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投稿写真を利用しようと思い 知的財産権の問題もありそうですね。
guest

回答1

0

自己解決

そもそもの問題点から見直す必要がありそうでですので、自己解決として解決済みにしたいと思います。

投稿2022/07/06 01:42

編集2022/07/06 01:43
ttttt08

総合スコア17

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問