Во-первых, вы почти никогда не хотите использовать регулярные выражения для разбора / извлечения / сворачивания / шпинделя / искажения XML или HTML. Есть слишком много способов, которыми это может пойти не так. Регулярные выражения хороши для некоторых заданий, но извлечение XML / HTML не очень подходит.
Тем не менее, вот что я бы сделал, используя Нокогири:
require 'nokogiri'
require 'open-uri'
doc = Nokogiri::HTML(open('http://www.quora.com/What-popular-startup-advice-is-plain-wrong'))
topic = doc.at('span a.topic_name span').content
puts topic
Запуск, который выводит:
Common Misconceptions
Код использует пару ярлыков, которые должны работать последовательно:
- Использование Ruby's
OpenURI
позволяет легко получить доступ к интернет-ресурсам. Это мой выбор для самых простых и средних приложений. Есть более мощные инструменты, но не такие удобные.
doc.at
говорит Нокогири обойти документ и найти первое вхождение средства доступа CSS 'span a.topic_name span
', которое должно быть согласовано на этой странице как первая запись.
Обратите внимание, что Nokogiri поддерживает несколько вариантов поиска узла: at
против search
. at
и %
и такие вещи, как css_at
, находят первое вхождение и возвращают Node
, который представляет собой отдельный тег, текст или комментарий. search
, /
, и эти варианты возвращают NodeSet
, который похож на массив узлов. Вам придется пройтись по этому списку или извлечь отдельные узлы, которые вы хотите, используя какой-либо метод доступа к массиву. В приведенном выше коде я мог бы сказать doc.search(...).first
, чтобы получить нужный мне узел.
Nokogiri также поддерживает использование аксессоров XPath, но в большинстве случаев я обычно использую CSS. Это проще и легче читать, но ваш пробег может отличаться.