Прошло много времени с тех пор, как я использовал Hpricot, но некоторые вещи, которые я помню, могут помочь:
Быстрый способ получить весь текст:
irb(main):023:0> print parsed.inner_text
Testing:
line 1
line 2
line 3
line 4
line 5
Here's some more text
Недостатокто есть вы также получаете текст, встроенный в теги.
Аналогично, мы можем искать все 'text()'
узлы:
irb(main):033:0> puts (parsed / 'text()')
Testing:
line 1
[...]
line 5
Итак, мы можем сделать это:
irb(main):036:0> puts (parsed / 'text()')[2 .. -3]
line 1
line 2
line 3
line 4
line 5
или:
irb(main):037:0> (parsed / 'text()')[2 .. -3]
=> #<Hpricot::Elements["\n line 1", " \n line 2", "\n line 3", "\n line 4", "\n line 5", "\n "]>
или:
irb(main):039:0> (parsed / 'text()')[2 .. -3].map{ |t| t.inner_text.strip }
=> ["line 1", "line 2", "line 3", "line 4", "line 5", ""]
Основная идея для получения данных / текста с веб-страницы заключается в поиске ориентиров, которые можно использовать для навигации по странице.,Часто мы можем получить текст из тега <div>
или <p>
.Если страница не дает вам ориентиры, вы должны использовать другие приемы;Ищем последовательность текстовых узлов, за которыми следуют <br>
узлы или пять строк, следующих за тегом <a>
с определенным атрибутом href
.Это забавно и непросто иметь дело с HTML.
В глубине души я думаю, что есть более изящный способ сделать это, но, похоже, это работает.Покопайтесь на странице Hpricot Challenge , чтобы узнать о вариациях тем при извлечении контента.