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

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

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

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Q&A

解決済

1回答

6364閲覧

TypeError: 'NoneType' object has no attribute '__getitem__'が返ってきます

toshiyuki123

総合スコア14

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

0グッド

0クリップ

投稿2016/10/01 07:22

###前提・実現したいこと
dockerからpythonでネットから自動で画像を収集するクローラーを動かしたくて電子工作速報さんのサイト(http://denshi.blog.jp/network/python/get_google_image)のプログラムをコピペして動かしてみたんですがTypeError: 'NoneType' object has no attribute 'getitem'のエラーが返ってきます

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

root@11be5e8a8b28:/notebooks# python crawler.py Traceback (most recent call last): File "crawler.py", line 49, in <module> main() File "crawler.py", line 43, in main urls = url_search(keyword, n=1) # URL File "crawler.py", line 15, in url_search img_url += [result["url"] for result in data["responseData"]["results"]] TypeError: 'NoneType' object has no attribute '__getitem__'

###該当のソースコード

python

1#-*- coding:utf-8 -*- 2import json 3import os 4import urllib2 5 6# keywordの画像リンクを探索 7def url_search(keyword, n): 8 9 img_url=[] 10 url = "http://ajax.googleapis.com/ajax/services/search/images?q={0}&amp;v=1.0&amp;rsz=large&amp;start={1}" 11 # keywordと一致する画像URLをn個取得 12 for i in range((n/8)+1): 13 res = urllib2.urlopen(url.format(keyword, i*8)) 14 data = json.load(res) 15 img_url += [result["url"] for result in data["responseData"]["results"]] 16 17 return img_url 18 19# URL先の画像ファイルを保存 20def url_download(keyword,urls): 21 print("Download Start...") 22 # keywordのフォルダが無ければ作成 23 if os.path.exists(keyword)==False: 24 os.mkdir(keyword) 25 26 opener = urllib2.build_opener() 27 # URLの数だけ画像DL 28 for i in range(len(set(urls))): 29 try: 30 fn, ext = os.path.splitext(urls[i]) 31 req = urllib2.Request(urls[i], headers={"User-Agent" : "Magic Browser"}) 32 img_file = open(keyword+"\\"+str(i)+ext, "wb") # 画像データの保存 33 img_file.write(opener.open(req).read()) 34 img_file.close() 35 print("DL Image Link:"+str(i+1)) 36 except: 37 continue 38 39# メイン文 40def main(): 41 42 keyword = "kankore" # 検索キーワード 43 urls = url_search(keyword, n=1) # 画像URLの探索 44 url_download(keyword,urls) # 画像のダウンロード 45 print("End...") 46 47 48if __name__ == '__main__': 49 main() 50

###試したこと
http://ja.stackoverflow.com/questions/4616/python-%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B-nonetype-object-has-no-attribute-getitem-%E3%81%A8%E3%81%84%E3%81%86%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6
をみたのですが、どこに[0]をいれればいいか分かりませんでした

###補足情報(言語/FW/ツール等のバージョンなど)
python2.7.6を使っています

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

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

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

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

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

guest

回答1

0

ベストアンサー

Google画像検索(googleapis)が廃止になり、

url = "http://ajax.googleapis.com/ajax/services/search/images?q={0}&amp;v=1.0&amp;rsz=large&amp;start={1}"

の応答結果が意図したものとなっていない事が原因です。

Google画像検索(googleapis)の廃止前は、

{"responseData": { "results": [ { … "url": "http://www.touchnote.com/files/assets/STAN009.jpg", … }, { … "url": "http://stuff.fuzzymonkeyphotography.com/front_page/NEW_NEW_logo3_480px.jpg", …

という形式で画像検索結果が返ってきたのですが、今だと以下のようになります。

{"responseData": null, "responseDetails": "This API is no longer available.", "responseStatus": 403}

"responseData"の中の、"results"の中の、"url"を取得したかったのが、そもそも"responseData"からないので、エラーが出ていたということです。

img_url += [result["url"] for result in data["responseData"]["results"]]

投稿2016/10/01 08:59

MIURA_Yasuyuki

総合スコア306

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

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

toshiyuki123

2016/10/02 12:59

そうだったんですね!ありがとうございます bing search apiを使うことにします
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問