我想要在谷歌上搜索特定關鍵字搜索的所有搜索結果。我已經看到了刮擦的建議,但這似乎是一個壞主意。我已經看到了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查詢時,您實際上並未從中提取。 –
感謝您指出這一點,我完全沒有意識到! –