Как правильно получить результаты поиска Google? - PullRequest
7 голосов
/ 17 ноября 2011

Я хочу получить все результаты поиска по определенному ключевому слову в Google. Я видел предложения соскоба, но это кажется плохой идеей. Я видел Gems (я планирую использовать ruby), которые занимаются очисткой и используют API. Я также видел предложения по использованию API.

Кто-нибудь знает лучший способ сделать это прямо сейчас? API больше не поддерживается, и я видел, как люди сообщали, что они возвращают непригодные данные. Помогают ли драгоценные камни решить это или нет?

Заранее спасибо.

Ответы [ 6 ]

10 голосов
/ 03 августа 2012

Я также выбрал опцию "Зачистка", это быстрее, чем запрашивать у Google ключ и плюс, и вы не ограничены 100 поисковыми запросами в день. Однако, как отмечает Ричард, Google TOS - это проблема. Вот пример, который я сделал, который работает для меня - это также полезно, если вы хотите подключиться через прокси:

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
2 голосов
/ 24 января 2016

В конечном итоге вы получите 503 ошибки, если вы запустите скребок на странице результатов поиска Google. Более масштабный (и законный) подход заключается в использовании API пользовательского поиска Google .

API предоставляет 100 поисковых запросов в день бесплатно. Если вам нужно больше, вы можете зарегистрироваться для выставления счетов в консоли разработчиков Google. Дополнительные запросы стоят 5 долларов за 1000 запросов, до 10 тысяч запросов в день.

В приведенном ниже примере показаны результаты поиска Google в формате 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")
2 голосов
/ 17 ноября 2011

Используйте API пользовательского поиска Google:

http://code.google.com/apis/customsearch/v1/overview.html

2 голосов
/ 17 ноября 2011

Согласно http://code.google.com/apis/websearch/ API поиска устарел, но есть замена, API пользовательского поиска . Будет ли это делать то, что вы хотите?

Если это так, быстрый поиск в Интернете обнаружился https://github.com/alexreisner/google_custom_search, среди прочих драгоценных камней.

1 голос
/ 22 декабря 2017

Вы также можете использовать наш API .Мы берем на себя трудные задачи по поиску и анализу результатов поиска Google.У нас есть привязки в Ruby, такие как:

query = GoogleSearchResults.new q: "coffee"
hash_results = query.get_hash

Репозиторий: https://github.com/serpapi/google-search-results-ruby

1 голос
/ 18 ноября 2011

API пользовательского поиска, скорее всего, не то, что вы ищете.Я почти уверен, что вам нужно настроить механизм пользовательского поиска, который вы используете для запроса по API, и он может выполнять поиск только по заданному пользователем набору доменов (т. Е. Вы не можете выполнять общий поиск в Интернете).

Если вам нужно выполнить общий поиск в Google, то в настоящее время это единственная возможность.Довольно просто написать код ruby ​​для выполнения поиска в Google и очистки URL-адресов результатов поиска (я сам делал это для летнего исследовательского проекта), но это нарушает TOS Google, так что будьте осторожны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...