有谷歌洞察API吗?

12 投票
4 回答
10944 浏览
提问于 2025-04-16 08:31

我一直在寻找一个可以自动获取Google Insights信息的接口,这样我就可以把它用在我的其他算法里,但我找了很久都没有找到合适的东西。谷歌搜索的第一个结果给我推荐了一个网站,上面有一个Python插件,但那个插件现在已经过时了。

请问有没有这样的接口存在,或者有没有人写过类似的插件,可能是用Python写的?

4 个回答

0

我找不到谷歌提供的任何文档,不过Brad Jasper似乎想出了一个方法,可以用来查询Insights的信息。注意:我不确定这个方法现在是否还有效……祝你好运!

使用Python访问谷歌Insights API

2

我刚开始搜索这个问题,发现用Python来获取数据有个不错的方法,具体可以参考这个脚本。基本上,它是通过向谷歌的历史金融数据库发送特定的请求来实现的。

def get_index(gindex, startdate=20040101):
    """
    API wrapper for Google Domestic Trends data.
        https://www.google.com/finance/domestic_trends

    Available Indices:

       'ADVERT', 'AIRTVL', 'AUTOBY', 'AUTOFI', 'AUTO', 'BIZIND', 'BNKRPT',
       'COMLND', 'COMPUT', 'CONSTR', 'CRCARD', 'DURBLE', 'EDUCAT', 'INVEST',
       'FINPLN', 'FURNTR', 'INSUR', 'JOBS', 'LUXURY', 'MOBILE', 'MTGE',
       'RLEST', 'RENTAL', 'SHOP', 'TRAVEL', 'UNEMPL'

    """
    base_url = 'http://www.google.com/finance/historical?q=GOOGLEINDEX_US:'
    full_url = '%s%s&output=csv&startdate=%s' % (base_url, gindex, startdate)
    dframe = read_csv(urlopen(full_url), index_col=0)
    dframe.index = DatetimeIndex(dframe.index)
    dframe = dframe.sort_index(0)
    for col in dframe.columns:
        if len(dframe[col].unique()) == 1:
            dframe.pop(col)
    if len(dframe.columns) == 1 and dframe.columns[0] == 'Close':
        dframe.columns = [gindex]
    return dframe[gindex] 
7

根据我所了解,目前还没有可用的API,也没有找到从Google Insights提取数据的有效方法。不过,我找到了解决我(稍微具体一点)问题的方法,这个问题其实只需要知道某些词被搜索的次数就可以解决。

这可以通过与Google Suggest协议进行交互来实现,Google Suggest是网页浏览器搜索框使用的。当你输入一个词时,它会返回一系列建议的短语,以及每个短语被搜索的次数(我不太确定这个时间单位,可能是过去一年内的数据)。

下面是一些Python代码,用于实现这个功能,这段代码稍微改编自odewahn1在O'reilly Answers上的代码,适用于Python 2.6及更低版本:

from sgmllib import SGMLParser
import urllib2
import urllib

# Define the class that will parse the suggestion XML
class PullSuggestions(SGMLParser):

   def reset(self):
      SGMLParser.reset(self)
      self.suggestions = []
      self.queries = []

   def start_suggestion(self, attrs):
      for a in attrs:
         if a[0] == 'data': self.suggestions.append(a[1])

   def start_num_queries(self, attrs):
      for a in attrs:
         if a[0] == 'int': self.queries.append(a[1])

# ENTER THE BASE QUERY HERE

base_query = ""  #This is the base query

base_query += "%s"
alphabet = "abcdefghijklmnopqrstuvwxyz"
for letter in alphabet:
   q = base_query % letter;
   query = urllib.urlencode({'q' : q})
   url = "http://google.com/complete/search?output=toolbar&%s" % query

   res = urllib2.urlopen(url)
   parser = PullSuggestions()
   parser.feed(res.read())
   parser.close()

   for i in range(0,len(parser.suggestions)):
      print "%s\t%s" % (parser.suggestions[i], parser.queries[i])

这至少部分解决了问题,但不幸的是,仍然很难可靠地获取任何特定词或短语的搜索次数,而且无法获取不同短语的搜索历史。

撰写回答