Очистка/анализ результатов поиска Google в Ruby

Предположим, у меня есть весь HTML-код страницы результатов поиска Google. Кто-нибудь знает какой-либо существующий код (Ruby?) для очистки/анализа первой страницы результатов поиска Google? В идеале он будет обрабатывать разделы «Результаты покупок» и «Результаты видео», которые могут появиться где угодно.

Если нет, то какой лучший инструмент на основе Ruby для очистки экрана в целом?

Для пояснения: я знаю, что сложно/невозможно получить результаты поиска Google программно/с помощью API, И простое скручивание страниц результатов вызывает много проблем. Здесь, в stackoverflow, есть консенсус по обоим этим пунктам. У меня другой вопрос.


person Community    schedule 08.10.2009    source источник
comment
Я предлагаю взглянуть на средство проверки рейтинга Google ( google-rank-checker.squabbel.com ). Это не рубин, это написано на PHP. Но он с открытым исходным кодом и решает все нужные вам задачи. Вы, похоже, не очень хорошо разбираетесь в ruby, я лично использовал PHP (консольные скрипты) для многих таких проектов (также в производственных средах). В любом случае, даже когда вы пишете на ruby, вы найдете код PHP полезным, поскольку некоторые задачи при очистке Google могут быть довольно сложными (задержки, IP-адреса, анализ DOM, отправка правильных параметров GET и т. д.).   -  person John    schedule 29.02.2012
comment
Это СТАРЫЙ вопрос, поэтому любой, кто использует его для оправдания использования очистки вместо API Google, должен переосмыслить свою логику. Используйте API, для этого он и существует.   -  person the Tin Man    schedule 06.03.2020
comment
Вместо этого используйте Системный поиск Google.   -  person the Tin Man    schedule 22.03.2020


Ответы (6)


Это должно быть очень просто, взгляните на "Очистка экрана с помощью ScrAPI» сыграно Райаном Бейтсом. Вы по-прежнему можете обойтись без парсинга библиотек, просто придерживайтесь таких вещей, как Nokogiri.


Из документации Нокогири:

require 'nokogiri'
require 'open-uri'

# Get a Nokogiri::HTML:Document for the page we’re interested in...

doc = Nokogiri::HTML(open('http://www.google.com/search?q=tenderlove'))

# Do funky things with it using Nokogiri::XML::Node methods...

####
# Search for nodes by css
doc.css('h3.r a.l').each do |link|
  puts link.content
end

####
# Search for nodes by xpath
doc.xpath('//h3/a[@class="l"]').each do |link|
  puts link.content
end

####
# Or mix and match.
doc.search('h3.r a.l', '//h3/a[@class="l"]').each do |link|
  puts link.content
end
person khelll    schedule 08.10.2009
comment
И вы можете сделать link['href'], чтобы получить href ссылки;). - person Dorian; 03.06.2012
comment
У Райана есть два скринкаста по парсингу: один на ScrAPI, упомянутый выше, и один на Nokogiri который использует код, более похожий на тот, что в этом ответе. - person notapatch; 06.07.2013
comment
Кажется, Google изменил макет страницы, и этот код больше не работает. - person reducing activity; 23.08.2018

Мне непонятно, почему вы вообще хотите очищать экран. Возможно, поисковый API REST был бы более подходящим? Он вернет результаты в формате JSON, который будет намного проще анализировать и сэкономить на пропускной способности.

Например, если вы искали «foo bar», вы можете просто отправить запрос GET на http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=foo+bar и обработать ответ.

Дополнительную информацию см. в разделе "REST API поиска Google. " или страницу разработчика Google.

person pkaeding    schedule 08.10.2009
comment
К сожалению, он не возвращает те же результаты. См.: code.google.com/p/google- ajax-apis/issues/detail?id=43 - person Anders Rune Jensen; 23.05.2010
comment
API веб-поиска Google больше не доступен - person reducing activity; 23.08.2018
comment
Вместо этого используйте Системный поиск Google. - person the Tin Man; 22.03.2020

Я бы предложил HTTParty + поисковый API Google Ajax.

person knoopx    schedule 08.05.2010
comment
Как написано, это вряд ли ответ. Укажите на соответствующие страницы, покажите, почему это полезный ответ, с некоторыми примерами кода. - person the Tin Man; 06.03.2020

Я не знаю конкретного кода Ruby, но этот парсер Google может помочь тебе. Это демонстрация онлайн-инструмента, который очищает и анализирует результаты Google. Самое интересное, что там есть статья с объяснением процесса парсинга в PHP, но она применима и к Ruby, и к любому другому языку программирования.

person Lix    schedule 16.09.2011
comment
В этот момент он просто отображает бесконечный список CAPTCHA, которые нужно решить. - person reducing activity; 23.08.2018

Вы сможете легко достичь своей цели с помощью Mechanize.

Если у вас уже есть результаты, все, что вам нужно, это Hpricot или Nokogiri.

person Avdi    schedule 08.10.2009
comment
Пожалуйста! И посмотрите мое обновление: если у вас уже есть результаты, Mechanize может оказаться излишним. - person Avdi; 08.10.2009
comment
Hpricot больше не поддерживается, так что не заходите туда. Nokogiri жив и здоров и поддерживает синтаксис Hpricot, но не используйте его, используйте обычный синтаксис Nokogiri, как показано в памятке и руководствах. - person the Tin Man; 06.03.2020
comment
К сожалению, поскольку Google использует DHTML для все большей и большей части страницы, парсинг стал более сложным, чем раньше. Вместо этого используйте Системный поиск Google. - person the Tin Man; 22.03.2020

Удаление становится все труднее и труднее, так как Google постоянно меняется, расширяя структуру результатов (расширенные фрагменты, диаграмма знаний, прямой ответ и т. д.), мы создали службу, которая справляется с частью этой сложности, и у нас есть библиотека Ruby. Это довольно просто использовать:

query = GoogleSearchResults.new q: "coffee"

# Parsed Google results into a Ruby hash
hash_results = query.get_hash
person Hartator    schedule 22.12.2017
comment
Кажется, это требует, чтобы вы заплатили Google за ключ SERP API. - person Ben Crowell; 08.04.2019
comment
Вместо этого используйте Системный поиск Google. - person the Tin Man; 22.03.2020