Я хочу скопировать определенный контент с веб-сайта, используя ruby/rails. Контент, который мне нужен, находится внутри html-тега marquee, разделенного div. Как я могу получить доступ к этому контенту с помощью ruby? Если быть точнее - хочу использовать какой-нибудь рубиновый гуй (желательно обувь). Как это сделать?
Как получить контент с веб-сайта с помощью Ruby/Rails?
Ответы (2)
На самом деле это не вопрос Rails. Это то, что вы бы сделали с помощью Ruby, а затем, возможно, отобразили бы с помощью Rails, или Sinatra, или Padrino — выберите свой яд.
Вы можете использовать несколько разных HTTP-клиентов:
Open-URI поставляется с Ruby и является самым простым. Net::HTTP поставляется с Ruby и является стандартным набором инструментов, но он низкоуровневый, поэтому вам придется проделать больше работы. HTTPClient и Typhoeus+Hydra поддерживают многопоточность и имеют как высокоуровневые, так и низкоуровневые интерфейсы.
Я рекомендую использовать Nokogiri для разбора возвращенного HTML. Он очень полнофункциональный и надежный.
require 'nokogiri'
require 'open-uri'
doc = Nokogiri::HTML(open('http://www.example.com'))
puts doc.to_html
Если вам нужно перемещаться по экранам входа в систему или заполнять формы, прежде чем вы попадете на страницу, которую нужно проанализировать, я бы порекомендовал обратить внимание на Mechanize. Он внутренне опирается на Nokogiri, поэтому вы можете запросить у него документ Nokogiri и проанализировать его, как только Mechanize получит нужный URL-адрес.
Если вам нужно работать с динамическим HTML, обратите внимание на различные инструменты WATIR. Они управляют различными веб-браузерами, а затем позволяют вам получить доступ к содержимому, которое видит браузер.
Когда у вас есть нужный контент или данные, вы можете «перепрофилировать» их в текст внутри страницы Rails.
Если я правильно понимаю, вам нужен графический интерфейс для парсера веб-сайтов. Если это так, возможно, вам придется построить его самостоятельно.
Самый простой способ очистить веб-сайт — использовать nokogiri или механизированные драгоценные камни. По сути, вы даете этим библиотекам адрес веб-сайта, а затем используете их возможности XPath для выбора текста из DOM.
https://github.com/sparklemotion/nokogiri
https://github.com/sparklemotion/mechanize (для документации)