Как извлечь заголовок темы HTML с веб-страницы? - PullRequest
2 голосов
/ 24 декабря 2011

Учитывая страницу типа " Какой популярный совет при запуске просто неверен? ", я хотел бы иметь возможность извлечь первую тему под заголовком темы в верхнем правом углу, в данном случае"Распространенные заблуждения".

Какой лучший способ для меня это сделать в Ruby?Это с Нокогири или регулярным выражением?Предположительно, мне нужно сделать разбор HTML?

1 Ответ

1 голос
/ 24 декабря 2011

Во-первых, вы почти никогда не хотите использовать регулярные выражения для разбора / извлечения / сворачивания / шпинделя / искажения 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

Код использует пару ярлыков, которые должны работать последовательно:

  1. Использование Ruby's OpenURI позволяет легко получить доступ к интернет-ресурсам. Это мой выбор для самых простых и средних приложений. Есть более мощные инструменты, но не такие удобные.
  2. doc.at говорит Нокогири обойти документ и найти первое вхождение средства доступа CSS 'span a.topic_name span', которое должно быть согласовано на этой странице как первая запись.

Обратите внимание, что Nokogiri поддерживает несколько вариантов поиска узла: at против search. at и % и такие вещи, как css_at, находят первое вхождение и возвращают Node, который представляет собой отдельный тег, текст или комментарий. search, /, и эти варианты возвращают NodeSet, который похож на массив узлов. Вам придется пройтись по этому списку или извлечь отдельные узлы, которые вы хотите, используя какой-либо метод доступа к массиву. В приведенном выше коде я мог бы сказать doc.search(...).first, чтобы получить нужный мне узел.

Nokogiri также поддерживает использование аксессоров XPath, но в большинстве случаев я обычно использую CSS. Это проще и легче читать, но ваш пробег может отличаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...