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

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

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

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

Q&A

解決済

2回答

1384閲覧

webデータの保存について

raonarud

総合スコア88

Python

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

0グッド

0クリップ

投稿2019/04/11 12:32

編集2019/04/14 09:51

webの画像urlを取得したいです。
以下コードですと最初の画像urlしか取得できないです。
2枚.3枚画像があるツイートは全てのurlを取得したいのですがいい方法はないでしょうか?

#!/usr/bin/env/python # coding: utf-8 import os import json import time import requests from hashlib import md5 from requests_oauthlib import OAuth1 onsumer_key = ''#your key consumer_secret = ''#your key access_token = ''#your key access_token_secret = ''#your key url = 'https://api.twitter.com/1.1/search/tweets.json' oauth = OAuth1(consumer_key,consumer_secret, access_token,access_token_secret) idnum = '' count = 1 while count <= 10: query_form = {'q' : u'パンツ } uri = requests.get(url, auth = oauth, params = query_form) json_loads = json.loads(uri.content) for data in json_loads['statuses']: if 'media' not in data['entities']: continue else: urls = data['entities']['media'] media_urls = urls[0]['media_url']#画像のURLを取得

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

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

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

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

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

guest

回答2

0

ベストアンサー

複数画像のURLはextended_entitiesmediaに入っているようです。
以下検証コードです。

Python

1from requests_oauthlib import OAuth1 2import requests 3 4def print_images(q_word): 5 6 consumer_key = "" 7 consumer_key_secret = "" 8 access_token = "" 9 access_token_secret = "" 10 auth = OAuth1(consumer_key, consumer_key_secret, access_token, access_token_secret) 11 12 url = "https://api.twitter.com/1.1/search/tweets.json" 13 params = { 'q':q_word, 'lang':'ja', 'count':100} 14 res = requests.get(url, auth = auth, params = params) 15 data = res.json() 16 if not 'statuses' in data: 17 return 18 for tweet in data['statuses']: 19 """ 20 if 'entities' in tweet and 'media' in tweet['entities']: 21 print('entities-----') 22 print(tweet['text']) 23 print('-----') 24 for m in tweet['entities']['media']: # こちらはつねに要素数が1?のようだ 25 print( m['media_url']) 26 """ 27 if 'extended_entities' in tweet and 'media' in tweet['extended_entities']: 28 urls = [] 29 for m in tweet['extended_entities']['media']: # こちらは複数要素(画像)がありえる 30 urls.append(m['media_url']) 31 print('extended_entities-----') 32 print(tweet['text']) 33 print('-----') 34 print(urls) 35 36print_images('パンツ')

投稿2019/04/13 03:35

編集2019/04/13 21:13
can110

総合スコア38256

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

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

raonarud

2019/04/13 13:45 編集

ありがとうございます。m['media_url']に画像urlが含まれていますが、複数の画像の場合、変数をm['media_url']1つではなく複数に分けたいのですが、可能なのでしょうか? 例;画像が3つあった場合 m1=1つ目のurl m2 = 2つ目のurl m3 = 3つ目のurl
can110

2019/04/13 21:15

わざわざ個別の変数に入れる必要はないと思います。 かわりにurlsというリスト型変数に格納するように回答コード修正しました。
raonarud

2019/04/14 04:30 編集

ありがとうございます。今日朝起きて見て実行して見ましたら。 for tweet in data['statuses']: KeyError: 'statuses' とエラーが急に出てしまうのですが、なぜでしょう、、、
can110

2019/04/14 05:05

回答コードを実行したのでしょうか? 当方環境では問題なく動作しています。
raonarud

2019/04/14 06:13

そうです。リクエスト回数がかかってしまったのかもしれません。
guest

0

私の回答は間違いですね。。。('entities'を見てた。。。)
can110さんの回答が正解ですね。


media_urls = urls[0]['media_url']#画像のURLを取得

urls[0]で1番目の物しか取得してないからですよね?
ここで全てのURL(urlsの要素全ての['media_url']の値)を取得すれば良いです。

投稿2019/04/13 02:09

編集2019/04/13 03:42
Y.H.

総合スコア7914

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問