#ruby-on-rails #ruby #nokogiri #mechanize
#ruby-on-rails #ruby #nokogiri #механизировать
Вопрос:
я хочу получить 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
Ответ №1:
Что-то вроде этого должно сработать:
@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. В чем была проблема? Где и почему «работает только «g»»? Пожалуйста, добавьте больше информации, чтобы мы могли правильно отредактировать ответ. У меня это работало без каких-либо изменений.
2. Удалите
knavi
из последней строки:@sitesurl << (result/"a").first.attribute('href') if result.attribute('class').to_s == 'g knavi'
должно быть@sitesurl << (result/"a").first.attribute('href') if result.attribute('class').to_s == 'g'
Ответ №2:
На данный момент это обновленная версия. Протестировано и работает нормально
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{=|amp;})
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 в array.
Ответ №3:
Сейчас это не работает, я полагаю, это может быть связано с тем, что Google недавно изменил свой HTML в результатах поиска и URL-адресах.
Комментарии:
1. ПО этой ссылке нет информации … это просто реклама их сервиса (отсюда часто повторяющийся совет SO не просто добавлять ссылку)
Ответ №4:
В настоящее время приведенные выше ответы больше не работают. Мы выпустили наш собственный gem, который прост в использовании и позволяет настраивать местоположения:
query = GoogleSearchResults.new q: "coffee", location: "Portand"
hash_results = query.get_hash
Репозиторий:https://github.com/serpapi/google-search-results-ruby