从Python应用中搜索Google

50 投票
4 回答
45572 浏览
提问于 2025-04-15 15:34

我想在一个Python应用程序中运行谷歌搜索查询。有没有什么Python接口可以让我做到这一点?如果没有,谁知道哪个谷歌API可以让我实现这个功能?谢谢。

4 个回答

11

这是我对这个问题的看法:http://breakingcode.wordpress.com/2010/06/29/google-search-python/

这里有几个代码示例:

    # Get the first 20 hits for: "Breaking Code" WordPress blog
    from google import search
    for url in search('"Breaking Code" WordPress blog', stop=20):
        print(url)

    # Get the first 20 hits for "Mariposa botnet" in Google Spain
    from google import search
    for url in search('Mariposa botnet', tld='es', lang='es', stop=20):
        print(url)

请注意,这段代码并没有使用Google的API,并且到现在(2012年1月)仍然可以正常工作。

17

这是Alex的回答,已经转换成Python3的版本

#!/usr/bin/python3
import json
import urllib.request, urllib.parse

def showsome(searchfor):
  query = urllib.parse.urlencode({'q': searchfor})
  url = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&%s' % query
  search_response = urllib.request.urlopen(url)
  search_results = search_response.read().decode("utf8")
  results = json.loads(search_results)
  data = results['responseData']
  print('Total results: %s' % data['cursor']['estimatedResultCount'])
  hits = data['results']
  print('Top %d hits:' % len(hits))
  for h in hits: print(' ', h['url'])
  print('For more results, see %s' % data['cursor']['moreResultsUrl'])

showsome('ermanno olmi')
72

这里有一个简单的例子,可以在这里找到(奇怪的是,里面缺少了一些引号;-)。网上大部分内容都是关于旧的、已经停止服务的SOAP API的Python接口,而我提到的这个例子使用的是更新的、仍然被支持的AJAX API,这个才是你真正需要的!-)

编辑:这里有一个更完整的Python 2.6的例子,里面包含了所有需要的引号等等...:

#!/usr/bin/python
import json
import urllib

def showsome(searchfor):
  query = urllib.urlencode({'q': searchfor})
  url = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&%s' % query
  search_response = urllib.urlopen(url)
  search_results = search_response.read()
  results = json.loads(search_results)
  data = results['responseData']
  print 'Total results: %s' % data['cursor']['estimatedResultCount']
  hits = data['results']
  print 'Top %d hits:' % len(hits)
  for h in hits: print ' ', h['url']
  print 'For more results, see %s' % data['cursor']['moreResultsUrl']

showsome('ermanno olmi')

撰写回答