谷歌search从Python应用程序
我试图从一个Python应用程序运行谷歌search查询。 有没有什么python界面,让我这样做? 如果没有人知道哪个Google API可以帮我做到这一点。 谢谢。
这里有一个简单的例子(特别缺less一些引号;-)。 你在网上看到的大部分内容都是旧的,停止使用的SOAP API的Python接口 – 我指出的例子使用了更新和支持的AJAX API,这绝对是你想要的 – )
编辑 :这是一个更完整的Python 2.6的例子,所有需要的引号&c; – )…:
#!/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')
这里是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')
这是我的方法: 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月)。
我是新的python,我正在调查如何做到这一点。 所提供的例子都不适合我。 有些被谷歌封锁,如果你做很多(less数)请求,有些是过时的。 分析谷歌search的HTML(在请求中添加头)将工作,直到谷歌再次改变HTML结构。 您可以使用相同的逻辑来search任何其他search引擎,查看html(视图源)。
import urllib2 def getgoogleurl(search,siteurl=False): if siteurl==False: return 'http://www.google.com/search?q='+urllib2.quote(search) else: return 'http://www.google.com/search?q=site:'+urllib2.quote(siteurl)+'%20'+urllib2.quote(search) def getgooglelinks(search,siteurl=False): #google returns 403 without user agent headers = {'User-agent':'Mozilla/11.0'} req = urllib2.Request(getgoogleurl(search,siteurl),None,headers) site = urllib2.urlopen(req) data = site.read() site.close() #no beatifulsoup because google html is generated with javascript start = data.find('<div id="res">') end = data.find('<div id="foot">') if data[start:end]=='': #error, no links to find return False else: links =[] data = data[start:end] start = 0 end = 0 while start>-1 and end>-1: #get only results of the provided site if siteurl==False: start = data.find('<a href="/url?q=') else: start = data.find('<a href="/url?q='+str(siteurl)) data = data[start+len('<a href="/url?q='):] end = data.find('&sa=U&ei=') if start>-1 and end>-1: link = urllib2.unquote(data[0:end]) data = data[end:len(data)] if link.find('http')==0: links.append(link) return links
用法:
links = getgooglelinks('python','http://www.stackoverflow.com/') for link in links: print link
(编辑1:添加一个参数,以缩小谷歌search到一个特定的网站)
(编辑2:当我添加这个答案时,我编写了一个Python脚本来search字幕,最近我把它上传到Github: Subseek )