2016-02-06 2 views
1

Так я написал скребком и я пытаюсь получить только текст абзаца, который включает в себя на снегу Feelnokogiri выберите пункт с текстом матча

Я пытаюсь вытащить что, но им не уверен, как чтобы nokogiri вытащил абзац, который имеет что-то похожее на текст.

На данный момент у меня есть boards[:onthesnowfeel] = html.css(".reviewfold p").text , но это фиксирует все абзацы. И не предполагайте, что абзацы будут в порядке все время. Так что просто не делай [2] или что-то в этом роде.

Но какой метод вы бы использовать, чтобы очистить пункт, соответствующий текст «О Snow Feel»

<div id="review" class="reviewfold"> 
<p>The <strong>Salomon A</strong><b>assassin</b>&nbsp;Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. </p> 
<p><b>Approximate Weight</b>: Moew mix is pretty normal</p> 
<p><strong>On Snow Feel:&nbsp;</strong>At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum.</p> 
<p><strong>Powder:&nbsp;</strong>It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. </p> 
</div> 
+0

Попробуйте 'html.css (". Reviewfold p "). Find {| e | e.text = ~/On Snow Feel /} .text'. – sschmeck

+0

Это сработало! @sschmeck – mystycs

+1

См. http://stackoverflow.com/questions/1474688/nokogiri-how-to-select-nodes-by-matching-text. Обратите внимание: если вы хотите совместить текст * в начале * абзаца, вам нужно будет использовать XPath: 'doc.xpath (« // * [@ class = 'reviewfold]] // p [start-with (., 'On Snow Feel')] ")' – sshaw

ответ

1

Вы можете использовать Enumerable#find в сочетании с регулярным выражением матча =~, чтобы получить нужное содержимое элемента.

html.css(".reviewfold p").find { |e| e.text =~ /On Snow Feel/ }.text 
Смежные вопросы