Как получить ссылки на результаты поиска Google и сохранить их в массиве с помощью Mechanize - PullRequest
2 голосов
/ 24 мая 2011

Я хочу получить 10 ссылок на результаты поиска Google (href) с использованием mechanize, поэтому я написал этот код, но код не возвращает правильные результаты поиска Google, что мне написать?

    @searchword = params[:q]
    @sitesurl = Array.new
    agent = Mechanize.new
    page = agent.get("http://www.google.com")
    search_form = page.form_with(:name => "f")
    search_form.field_with(:name => "q").value = @searchword.to_s 
    search_results = agent.submit(search_form)
    count = 0
    c = 0
    while  c < 10
    if (search_results/"li")[count].attributes['class'].to_s == "g knavi"
      site = (search_results/"li")[count]
      code = (site/"a")[0].attributes['href']
      @sitesurl << code
      c += 1
    end
    count += 1
end

Ответы [ 4 ]

2 голосов
/ 25 мая 2011

Примерно так должно работать:

@searchword = params[:q]
@sitesurl = Array.new
agent = Mechanize.new
page = agent.get("http://www.google.com")
search_form = page.form_with(:name => "f")
search_form.field_with(:name => "q").value = @searchword.to_s     
search_results = agent.submit(search_form)

(search_results/"li.g").each do |result|
  @sitesurl << (result/"a").first.attribute('href') if result.attribute('class').to_s == 'g knavi'
end
1 голос
/ 23 апреля 2014

Это обновленный на данный момент.Протестировано и работает нормально

require 'rubygems'
require 'mechanize' 
require 'hpricot'

agent = Mechanize.new 
agent.user_agent_alias = 'Linux Firefox' 
page = agent.get('http://google.com/') 
google_form = page.form('f') google_form.q = 'your search'

page = agent.submit(google_form)

 page.links.each do |link|
if link.href.to_s =~/url.q/
        str=link.href.to_s
        strList=str.split(%r{=|&}) 
        url=strList[1]
        # if You need cached url's then just remove this condition and simply use URL's 
        if ! url.include? "webcache"
            puts url
        end
     end
  end 

Просто создайте новый массив и вставьте URL в массив.

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

В настоящее время ответы выше не работают больше. Мы выпустили наш собственный драгоценный камень, который прост в использовании и позволяет создавать нестандартные локации:

query = GoogleSearchResults.new q: "coffee", location: "Portand"
hash_results = query.get_hash

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

0 голосов
/ 17 июля 2011

Сейчас это не работает, я полагаю, это может быть из-за того, что Google недавно изменил свой HTML в результатах поиска и URL-адресах.

...