2012-02-16 8 views
6

Google画像検索から特定のクエリの画像を取得しようとしています。しかし、私がダウンロードしたページには写真がなく、Googleのオリジナルのページにリダイレクトされます。ここに私のコード:Python:Googleの画像検索から画像をダウンロードするための正しいURL

AGENT_ID = "Mozilla/5.0 (X11; Linux x86_64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1" 

GOOGLE_URL = "https://www.google.com/images?source=hp&q={0}" 

_myGooglePage = "" 

def scrape(self, theQuery) : 
    self._myGooglePage = subprocess.check_output(["curl", "-L", "-A", self.AGENT_ID, self.GOOGLE_URL.format(urllib.quote(theQuery))], stderr=subprocess.STDOUT) 
    print self.GOOGLE_URL.format(urllib.quote(theQuery)) 
    print self._myGooglePage 
    f = open('./../../googleimages.html', 'w') 
    f.write(self._myGooglePage) 

私は間違って何をしていますか?

おかげ

+1

少なくともファイルハンドルを閉じる必要があります –

+0

それは働いた!ありがとう – lorussian

+0

@silviolor:あなたの問題を助けるものではないが、curlの代わりにpythonの組み込みの 'urllib2'モジュールを使わないのは分かります。 – RanRag

答えて

3

私は...あなたにヒントを与えるここから始めましょう:JULIEとニューマーは検索用語です

https://ajax.googleapis.com/ajax/services/search/images?v=1.0&q=JULIE%20NEWMAR

。あなたが必要とするJSONデータを返します

は...あなたはそれが最初に見つけることに json.loadまたは simplejson.loadを使用すると、辞書...ダイビング続くを取り戻すためにすることを解析する必要があります レスポンスデータの場合、 の結果リストには、 urlの各アイテムが含まれています。

Googleの自動スクレイピングは何も提案していませんが、具体的には(deprecated) APIには記載されていないためです。

+0

ありがとう、この方法は実際に簡単に見えます。 – lorussian

+0

このAPIは利用できなくなりましたのでご注意ください。 – prooffreader

3
+0

こんにちは、あなたのスクリプトはPILを使用しているようです。残念ながら私はこのマシンにPILをインストールする際に大きな問題があるようです。私はちょうどイメージを必要とするので、イメージを変換することなく、イメージなしで逃げる方法がありますか? –

+0

私はPILを避ける方法はわかりませんが、Macを使ってパッケージのインストールを簡素化しPILをインストールする場合は、MacPortsを強くお勧めします。 – crizCraig

+0

より良い、自作:http://brew.sh/ –

6

これは私がGoogleからの画像を検索し、ダウンロードするために使用することはPythonのコードで、それが役に立てば幸い:

import os 
import sys 
import time 
from urllib import FancyURLopener 
import urllib2 
import simplejson 

# Define search term 
searchTerm = "hello world" 

# Replace spaces ' ' in search term for '%20' in order to comply with request 
searchTerm = searchTerm.replace(' ','%20') 


# Start FancyURLopener with defined version 
class MyOpener(FancyURLopener): 
    version = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11' 
myopener = MyOpener() 

# Set count to 0 
count= 0 

for i in range(0,10): 
    # Notice that the start changes for each iteration in order to request a new set of images for each loop 
    url = ('https://ajax.googleapis.com/ajax/services/search/images?' + 'v=1.0&q='+searchTerm+'&start='+str(i*4)+'&userip=MyIP') 
    print url 
    request = urllib2.Request(url, None, {'Referer': 'testing'}) 
    response = urllib2.urlopen(request) 

    # Get results using JSON 
    results = simplejson.load(response) 
    data = results['responseData'] 
    dataInfo = data['results'] 

    # Iterate for each result and get unescaped url 
    for myUrl in dataInfo: 
     count = count + 1 
     print myUrl['unescapedUrl'] 

     myopener.retrieve(myUrl['unescapedUrl'],str(count)+'.jpg') 

    # Sleep for one second to prevent IP blocking from Google 
    time.sleep(1) 

あなたはまた、非常に有用な情報hereを見つけることができます。

+0

Googleに与えられたURLの画像タイプを定義することは可能ですか – erogol

+0

私はこれを少しは見ていませんが、最新のGoogle APIをチェックしています。私は答えが「はい」だと思います。あなたは ".png"、 ".jpg"、そしてベクトルベースのフォーマット ".svg"への検索を絞り込むことができます。 –

0

これは古いですが、私はちょうどこれに答えるためにjoingです。これを行うことについてもっと簡単な方法があります。

​​

それです。

+0

これは3.xにあるので、urllib.requestを2.xのurllib2に置き換えてください。 – riyoken

関連する問題