我试图从运行Python应用程序谷歌搜索查询。 是否有任何Python接口在那里它可以让我做到这一点? 如果没有没有人知道哪些谷歌API使我能做到这一点。 谢谢。
Answer 1:
有一个简单的例子这里 (缺少独有的一些报价;-)。 大多数的什么,你会在网络上看到的是Python的接口,旧的,停产SOAP API - 我指着例子使用了更新,支持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')
Answer 2:
下面是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')
Answer 3:
这里是我的方法是: 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)
请注意,这个代码不使用谷歌API,并仍在努力日期(2012年1月)。
Answer 4:
我在新的蟒蛇,我是研究如何做到这一点。 所提供的例子都不是为我工作正常。 有些是由谷歌封锁,如果你做多(少)的要求,有些已经过时。 解析谷歌搜索HTML(添加在请求中的报头)将工作直到谷歌再次改变HTML结构。 您可以使用相同的逻辑在其他任何搜索引擎进行搜索,寻找到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:将参数添加到缩小谷歌搜索到特定的位点)
(编辑2:当我加入这个答案我是编码一个Python脚本来搜索字幕我最近上传到Github上: Subseek )
Answer 5:
由于AJAX API是死的,你可以像使用第三方服务应用Serp API是谷歌搜索引擎的结果包装。
这很容易与Python集成:
from lib.google_search_results import GoogleSearchResults
params = {
"q" : "Coffee",
"location" : "Austin, Texas, United States",
"hl" : "en",
"gl" : "us",
"google_domain" : "google.com",
"api_key" : "demo",
}
query = GoogleSearchResults(params)
dictionary_results = query.get_dictionary()
GitHub上: https://github.com/serpapi/google-search-results-python
文章来源: Google Search from a Python App