2010-12-14 1 views
1

を使用して最初の10 Googleの検索結果を取得し、私は最初の10 Googleは、たとえばgoogleapi

を結果取得する必要があります:

... query = urllib.urlencode({'q' : 'example'}) 
... 
... url = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&%s' \ 
... % (query) 
... search_results = urllib.urlopen(url) 
... json = simplejson.loads(search_results.read()) 
... results = json['responseData']['results'] 

これが私の最初のページの結果が得られますが、同様I`dより多くのGoogleの結果を得るには、誰もそれを行う方法を知っていますか?

答えて

3

私はここで、過去にそれをやったが(私はPythonの第一人者ないんだけど、それは動作します)完全な例です:

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

import sys, getopt 
import urllib 
import simplejson 

OPTIONS = ("m:", ["min="]) 

def print_usage(): 
    s = "usage: " + sys.argv[0] + " " 
    for o in OPTIONS[0]: 
     if o != ":" : s += "[-" + o + "] " 
    print(s + "query_string\n") 

def search(query, index, offset, min_count, quiet=False, rs=[]): 
    url = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&rsz=large&%s&start=%s" % (query, offset) 
    result = urllib.urlopen(url) 
    json = simplejson.loads(result.read()) 
    status = json["responseStatus"] 
    if status == 200: 
     results = json["responseData"]["results"] 
     cursor = json["responseData"]["cursor"] 
     pages = cursor["pages"] 
     for r in results: 
      i = results.index(r) + (index -1) * len(results) + 1 
      u = r["unescapedUrl"] 
      rs.append(u) 
      if not quiet: 
       print("%3d. %s" % (i, u)) 
     next_index = None 
     next_offset = None 
     for p in pages: 
      if p["label"] == index: 
       i = pages.index(p) 
       if i < len(pages) - 1: 
        next_index = pages[i+1]["label"] 
        next_offset = pages[i+1]["start"] 
       break 
     if next_index != None and next_offset != None: 
      if int(next_offset) < min_count: 
       search(query, next_index, next_offset, min_count, quiet, rs) 
    return rs 

def main(): 
    min_count = 64 
    try: 
     opts, args = getopt.getopt(sys.argv[1:], *OPTIONS) 
     for opt, arg in opts: 
      if opt in ("-m", "--min"): 
       min_count = int(arg) 
     assert len(args) > 0 
    except: 
     print_usage() 
     sys.exit(1) 
    qs = " ".join(args) 
    query = urllib.urlencode({"q" : qs}) 
    search(query, 1, "0", min_count) 

if __name__ == "__main__": 
    main() 

編集:私は明白なコマンドラインオプションを修正しました誤った取り扱いをする。次のようにこのスクリプトを呼び出すことができます。

python gsearch.py --min=5 vanessa mae 

--minスイッチ「は、少なくとも5件の結果」を意味し、オプションであり、それが指定されていない場合は、最大許容結果数(64)を取得します。

また、エラー処理は簡潔にするために省略されています。

1

この方法は現在Googleがdeprecatedとして言及され、あなたが試してみたいことがあります。

http://code.google.com/apis/customsearch/v1/overview.html

+0

それだけで一日あたり100個の無料のクエリを許可し、APIキーを必要とするので、CSEが効果的に役に立ちません。廃止予定のAPIを使用すると、APIキーなしでクライアントからの結果を直接取得できます。 – wuxiekeji

関連する問題