我想要在谷歌上搜索特定关键字搜索的所有搜索结果。我已经看到了刮擦的建议,但这似乎是一个坏主意。我已经看到了Gems(我打算使用ruby)来搞定和使用API。我也看到了使用API的建议。获取谷歌搜索结果的正确方法是什么?
有谁知道现在这样做的最好方法吗?该API不再被支持,我看到有人报告他们得到了无法使用的数据。宝石是否有助于解决这个问题?
在此先感谢。
我想要在谷歌上搜索特定关键字搜索的所有搜索结果。我已经看到了刮擦的建议,但这似乎是一个坏主意。我已经看到了Gems(我打算使用ruby)来搞定和使用API。我也看到了使用API的建议。获取谷歌搜索结果的正确方法是什么?
有谁知道现在这样做的最好方法吗?该API不再被支持,我看到有人报告他们得到了无法使用的数据。宝石是否有助于解决这个问题?
在此先感谢。
根据http://code.google.com/apis/websearch/,Search API已被弃用 - 但有替代产品Custom Search API。这会做你想要的吗?
如果是这样,一个快速的网络搜索出现了https://github.com/alexreisner/google_custom_search,以及其他宝石。
自定义搜索API最有可能的是不是你要找的东西。我很确定你必须建立一个自定义搜索引擎,你可以使用API来查询,并且这只能搜索用户指定的一组域(即你不能执行一般的网页搜索)。
如果您需要执行一般的Google搜索,那么抓取是当前唯一的方法。编写Ruby代码来执行Google搜索和刮取搜索结果URL(我自己做了一个夏季研究项目)很容易,但它确实违反了Google的TOS,所以要警告。
我也会选择scrape选项,它的速度比谷歌要求的还要快,而且每天你不限于100次搜索查询。正如理查德指出的那样,谷歌的TOS是一个问题。 Here's一个例子从来就做到这一点对我的作品 - 如果你想通过代理连接it's也有用:
require 'rubygems'
require 'mechanize'
agent = Mechanize.new
agent.set_proxy '78.186.178.153', 8080
page = agent.get('http://www.google.com/')
google_form = page.form('f')
google_form.q = 'new york city council'
page = agent.submit(google_form, google_form.buttons.first)
page.links.each do |link|
if link.href.to_s =~/url.q/
str=link.href.to_s
strList=str.split(%r{=|&})
url=strList[1]
puts url
end
end
你最终会得到503错误,如果你正在运行一个刮刀谷歌搜索结果页面。更可扩展(合法)的方法是使用Google's Custom Search API。
该API每天免费提供100个搜索查询。如果您需要更多,则可以在Google Developers Console中注册帐单。其他请求每千次查询花费5美元,每天查询高达10k次。
下面以JSON格式获取的谷歌搜索结果的例子:
require 'open-uri'
require 'httparty'
require 'pp'
def get_google_search_results(search_phrase)
# assign api key
api_key = "Your api key here"
# encode search phrase
search_phrase_encoded = URI::encode(search_phrase)
# get api response
response = HTTParty.get("https://www.googleapis.com/customsearch/v1?q=#{search_phrase_encoded}&key=#{api_key}&num=100")
# pretty print api response
pp response
# get the url of the first search result
first_search_result_link = response["items"][0]["link"]
end
get_google_search_results("Top Movies in Theatres")
您也可以使用我们的API。我们关注报废和解析Google搜索结果的难题。我们在Ruby中提供的绑定那样简单:
query = GoogleSearchResults.new q: "coffee"
hash_results = query.get_hash
理查德,我确实有这方面的工作(有点)见:http://stackoverflow.com/questions/8173962/json-parsing -google-api-custom-search-error,这将返回来自整个网络的结果。是的,您必须设置一个自定义搜索引擎,但是当您执行API查询时,您实际上并未从中提取。 –
感谢您指出这一点,我完全没有意识到! –