Ответ 1
Лучше всего использовать Mechanize. Он может следить за ссылками, отправлять формы, что угодно, веб-клиент, Кстати, не используйте регулярные выражения для анализа HTML. Используйте парсер HTML.
Я хотел бы просканировать популярный сайт (скажем, Quora), который не имеет API и получить определенную информацию и выгрузить его в файл - скажем, csv,.txt или .html отлично отформатирован:)
например. возвратите только список всех "Биосов" пользователей Quora, которые, в своей общедоступной информации, указали в "дизайнере UX".
Как мне сделать это в Ruby?
У меня достаточно умеренный уровень понимания того, как работают Ruby и Rails. Я только что закончил приложение Rails - в основном все написано мной. Но я не гуру ни в какой степени воображения.
Я понимаю RegExs и т.д.
Лучше всего использовать Mechanize. Он может следить за ссылками, отправлять формы, что угодно, веб-клиент, Кстати, не используйте регулярные выражения для анализа HTML. Используйте парсер HTML.
Если вы хотите что-то более высокое, попробуйте wombat, который является этим камнем, который я построил на вершине Mechanize и Nokogiri. Он способен анализировать страницы и следовать ссылкам, используя действительно простой и высокий уровень DSL.
Я знаю, что ответ был принят, но Hpricot также очень популярен для разбора HTML.
Все, что вам нужно сделать, это взглянуть на источник html страниц и попытаться найти выражение XPath или CSS, которое соответствует нужным элементам, а затем использовать что-то вроде:
doc.search("//p[@class='posted']")
Механизация - это потрясающе. Если вы хотите узнать что-то новое, вы можете взглянуть на Scrubyt: https://github.com/scrubber/scrubyt. Похоже, Mechanize + Hpricot. Я никогда не использовал его, но это кажется интересным.
Nokogiri отлично, но я нахожу выход бесполезным для работы. Я написал рубиновый камень, чтобы легко создавать классы вне HTML: https://github.com/jassa/hyper_api
Драйвер HyperAPI использует Nokogiri для анализа HTML с помощью селекторов CSS.
например.
Post = HyperAPI.new_class do
string title: 'div#title'
string body: 'div#body'
string author: '#details .author'
integer comments_count: '#extra .comment' do
size
end
end
# => Post
post = Post.new(html_string)
# => #<Post title: 'Hi there!', body: 'This blog post will talk about...', author: 'Bob', comments_count: 74>