2011-02-12 24 views
3

質問に対してGoogle画像を取得したい。私はGoogleの画像の検索APIを介して行ったが、理解することができません。私もいくつかの方法を見て、彼らは最初のpage.iのみの画像をフェッチするが、次のメソッドを使用しています。Google画像を取得する方法

 
function getGoogleImg($k) 
{ 
    $url = "http://images.google.it/images?as_q=##query##&hl=it&imgtbs=z&btnG=Cerca+con+Google&as_epq=&as_oq=&as_eq=&imgtype=&imgsz=m&imgw=&imgh=&imgar=&as_filetype=&imgc=&as_sitesearch=&as_rights=&safe=images&as_st=y"; 
    $web_page = file_get_contents(str_replace("##query##",urlencode($k), $url)); 
    $tieni = stristr($web_page,"dyn.setResults("); 
    $tieni = str_replace("dyn.setResults(","", str_replace(stristr($tieni,");"),"",$tieni)); 
    $tieni = str_replace("[]","",$tieni); 
    $m = preg_split("/[\[\]]/",$tieni); 
    $x = array(); 
    for($i=0;$i<count($m);$i++) 
    { 
     $m[$i] = str_replace("/imgres?imgurl\\x3d","",$m[$i]); 
     $m[$i] = str_replace(stristr($m[$i],"\\x26imgrefurl"),"",$m[$i]); 
     $m[$i] = preg_replace("/^\"/i","",$m[$i]); 
     $m[$i] = preg_replace("/^,/i","",$m[$i]); 
     if ($m[$i]!="") 
     array_push($x,$m[$i]); 
    } 
    return $x; 
} 

この関数は、21個の画像しか返しません。この質問に対してすべての画像が欲しいです。私はPHPでこれをやっています

+0

ここでそれを得ることができGoogle検索

からか、完全に動作するスクリプトのためのトレーニング画像に

を収集するための画像をダウンロードするには、このスクリプトを使用することができますあなたはGoogleのを見たことがありますあなたがすべて(何百万もの可能性があります)結果を与える - 結果ページ?ただし、image-search-api:http://code.google.com/intl/de/apis/imagesearch/ –

+0

はいDr.Mollieを使用することをおすすめします。しかし、それが戻ってくると、それらの一部だけが返されます。すべてではない。我々はGoogleの画像をスクラップすることはできません。 –

+0

すべての結果(もちろん20枚以上の画像)を含むこれらの結果ページの1つを表示してください –

答えて

1

悲しいことに、画像APIが閉じているので、私はそれに移ることを勧めませんが、それは私が考えるより良いソリューションでした。

私の最高の推測では、イメージ22とフォワードはsom AJAX/javascriptを使用して読み込まれています(ロゴを検索してスクロールすると、下に移動すると読み込まれるプレースホルダが表示されます) JavaScriptのエンジンによってページを渡すために、それは私が(まだ)PHPでやった人を見つけることができるものではありません。 $ web_pageに21以上の画像が含まれていることを確認しましたか(Googleの画像検索に対しておもちゃをすると、画像の一部を読み込むためにJavaScriptが使用されます)。 通常のブラウザからリンクにアクセスすると、何が起こりますか?JavaScriptをオフにするとどうなりますか? 結果に次のページへのリンクがありますか?廃止画像APIで

は、あなたがして、検索結果から画像を検索を行うと、フェッチに保存しておきたい場合はページごとの結果、次のページhttps://developers.google.com/image-search/v1/jsondevguide#json_snippets_php

にステップする方法の数を制限する方法がありました後でhttp://simplehtmldom.sourceforge.net/のために見て良い代替手段かもしれない。 これは、html DOMを取得し、ノードを簡単に見つけることができ、簡単にノードを見つけることができます。しかし、まだfile_get_contentsやcurlライブラリを使ってデータを取得しているので、javascriptを動作させるためには手間が必要かもしれません。

1

私は私がstackoverflowの答えに、私はどのように詳細に説明します

Python - Download Images from google Image search?

を書いた元のスクリプト私は現在、100元の画像に

をダウンロードGoogle画像検索を形成する画像をダウンロードするためのスクリプトを書きましたurllib2とBeautifulSoupを使ってGoogleの画像検索からURLを取得しています。

たとえば、映画ターミネーターの画像を削りたい場合は3上記メートル、Googleの画像検索

query= "Terminator 3" 
query= '+'.join(query.split()) #this will make the query terminator+3 
url="https://www.google.co.in/search?q="+query+"&source=lnms&tbm=isch" 
header={'User-Agent':"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36" 
} 
req = urllib2.Request(url,headers=header) 
soup= urllib2.urlopen(req) 
soup = BeautifulSoup(soup) 

変数スープは今、私たちはuは、ブラウザでWebページを開く必要がありますし、そして上の要素を検査行い、そのために画像を抽出する必要が要求されたページのHTMLコードが含まれていますここでは画像

私は「DIV」を見つけ、Googleの画像について、たとえば、{「クラス」:「rg_meta」} URL

の画像を含むタグが見つかります画像へのリンクを含んを

あなたはBeautifulSoup doccummenを検索することができますtation

print soup.find_all("div",{"class":"rg_meta"}) 

uが

<div class="rg_meta">{"cl":3,"cr":3,"ct":12,"id":"C0s-rtOZqcJOvM:","isu":"emuparadise.me","itg":false,"ity":"jpg","oh":540,"ou":"http://199.101.98.242/media/images/66433-Terminator_3_The_Redemption-1.jpg","ow":960,"pt":"Terminator 3 The Redemption ISO \\u0026lt; GCN ISOs | Emuparadise","rid":"VJSwsesuO1s1UM","ru":"http://www.emuparadise.me/Nintendo_Gamecube_ISOs/Terminator_3_The_Redemption/66433","s":"Screenshot Thumbnail/Media File 1 for Terminator 3 The Redemption","th":168,"tu":"https://encrypted-tbn2.gstatic.com/images?q\\u003dtbn:ANd9GcRs8dp-ojc4BmP1PONsXlvscfIl58k9hpu6aWlGV_WwJ33A26jaIw","tw":300}</div> 

結果は、上記の私たちの画像URLへのリンクが含まれているとして、結果のリストを取得します

http://199.101.98.242/media/images/66433-Terminator_3_The_Redemption-1.jpg 

を次のようにuはこれらのリンクや画像を抽出することができます

ActualImages=[]# contains the link for Large original images, type of image 
for a in soup.find_all("div",{"class":"rg_meta"}): 
    link , Type =json.loads(a.text)["ou"] ,json.loads(a.text)["ity"] 
    ActualImages.append((link,Type)) 

for i , (img , Type) in enumerate(ActualImages): 
    try: 
     req = urllib2.Request(img, headers={'User-Agent' : header}) 
     raw_img = urllib2.urlopen(req).read() 
     if not os.path.exists(DIR): 
      os.mkdir(DIR) 
     cntr = len([i for i in os.listdir(DIR) if image_type in i]) + 1 
     print cntr 
     if len(Type)==0: 
      f = open(DIR + image_type + "_"+ str(cntr)+".jpg", 'wb') 
     else : 
      f = open(DIR + image_type + "_"+ str(cntr)+"."+Type, 'wb') 


     f.write(raw_img) 
     f.close() 
    except Exception as e: 
     print "could not load : "+img 
     print e 

出来上がりは今uがあなたが

https://gist.github.com/rishabhsixfeet/8ff479de9d19549d5c2d8bfc14af9b88

関連する問題