「Google Suggest」の検索候補をPythonで取得

Googleで検索したときに検索候補を表示してくれる「Google Suggest」、大変便利ですよね。

この機能は、現在入力したキーワードを元に、javascriptを使って別の候補を取得しています。

実はこの機能は、特定のURLにクエリを投げることで、検索候補を取得できるようになっています。

この機能をPythonから利用できるように、スクリプトを組んでみました。

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

import urllib
import urllib2
import re

class GoogleSuggestAPI:
    def __init__(self):
        self.base_url = 'http://www.google.co.jp/complete/search?output=toolbar&q='
        self.xml_re = re.compile('<CompleteSuggestion><suggestion data="(.+?)"/><num_queries int="(.+?)"/></CompleteSuggestion>', re.DOTALL)

    def get(self, query):
        try:
            reader = urllib2.urlopen(self.base_url + urllib.quote_plus(query))
        except:
            return None
        buf = reader.read()
        result_list = list()
        for match in self.xml_re.finditer(buf):
            result = dict([['suggestion', match.group(1)],
                           ['num_queries', int(match.group(2))]])
            result_list.append(result)
        return result_list

if '__main__' == __name__:
    gsapi = GoogleSuggestAPI()
    result_list = gsapi.get('hello')
    if None == result_list:
        print 'Error'
    for result in result_list:
        print '%s: %d' % (result['suggestion'], result['num_queries'])

スクリプトからも推測できるかと思いますが、「http://www.google.co.jp/complete/search?output=toolbar&q=(キーワード)」にキーワードを送ることで、XMLのデータが返ってくるようになっています。

このスクリプトを「GoogleSuggestAPI.py」というファイルに保存して、実際に実行してみると以下のようなXMLが返ってきます。

<?xml version="1.0"?>
<toplevel>
<CompleteSuggestion><suggestion data="hello world"/><num_queries int="90200000"/></CompleteSuggestion>
<CompleteSuggestion><suggestion data="helloween"/><num_queries int="3160000"/></CompleteSuggestion>
<CompleteSuggestion><suggestion data="hellowork"/><num_queries int="3410000"/></CompleteSuggestion>
<CompleteSuggestion><suggestion data="hello project"/><num_queries int="95900000"/></CompleteSuggestion>
<CompleteSuggestion><suggestion data="hello work go jp"/><num_queries int="2690000"/></CompleteSuggestion>
<CompleteSuggestion><suggestion data="hello kitty"/><num_queries int="33900000"/></CompleteSuggestion>
<CompleteSuggestion><suggestion data="hello online"/><num_queries int="114000000"/></CompleteSuggestion>
<CompleteSuggestion><suggestion data="hello goodbye 歌詞"/><num_queries int="68700"/></CompleteSuggestion>
<CompleteSuggestion><suggestion data="hello again"/><num_queries int="81200000"/></CompleteSuggestion>
<CompleteSuggestion><suggestion data="hello 歌詞"/><num_queries int="1840000"/></CompleteSuggestion>
</toplevel>

これを正規表現で整形した結果を表示しているので、実行結果は以下のようになります。

>python ./GoogleSuggestAPI.py
hello world: 90200000
helloween: 3160000
hellowork: 3410000
hello project: 95900000
hello work go jp: 2690000
hello kitty: 33900000
hello online: 114000000
hello goodbye 歌詞: 68700
hello again: 81200000
hello 歌詞: 1840000

Google Suggest」は、多くの検索クエリーを蓄えている検索エンジンだからこそ作れる機能ですよね。

大変便利です。

もし、「Google Suggest」の機能をPythonから使ってみたい場合は、このコードを参考にしてみてください。