2011-12-18 30 views
5

tôi gặp HTML này:Làm thế nào để trích xuất văn bản con với Nokogiri?

<div class='featured'> 
    <h1> 
     How to extract this? 
     <span>Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</span> 
     <span class="moredetail "> 
      <a href="/hello" title="hello">hello</a> 
     </span> 
     <div class="clear"></div> 
    </h1> 
</div> 

tôi muốn trích xuất văn bản <h1> "How to extract this?". Làm thế nào để tôi làm như vậy?

Tôi đã thử với mã sau đây, nhưng có phần tử khác được nối vào. Tôi không chắc chắn cách loại trừ chúng để tôi chỉ nhận được văn bản <h1>.

doc = Nokogiri::HTML(open(url))  
records = doc.css(".featured h1") 

Trả lời

6

#css trả về bộ sưu tập, sử dụng #at_css để nhận nút khớp đầu tiên. Tất cả nội dung của nó, ngay cả văn bản, đều là trẻ em, và trong trường hợp này, văn bản là đứa con đầu tiên của nó. Bạn cũng có thể làm một cái gì đó như children.reject &element? nếu bạn muốn tất cả các trẻ em không phải là yếu tố.

data = ' 
<div class="featured"> 
    <h1> 
     How to extract this? 
     <span>Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</span> 
     <span class="moredetail "> 
      <a href="/hello" title="hello">hello</a> 
     </span> 
     <div class="clear"></div> 
    </h1> 
</div> 
' 

require 'nokogiri' 
text = Nokogiri::HTML(data).at_css('.featured h1').children.first.text 
text # => "\n  How to extract this?\n  " 

Ngoài ra, bạn có thể sử dụng XPath:

Nokogiri::HTML(data).at_xpath('//*[@class="featured"]/h1/text()').text 
+2

Bạn có thể sử dụng văn bản() với selectors css cũng như xpath: .at ('đặc trưng văn bản h1()') văn bản – pguardiario

+0

@. pguardiario Nifty. Đó là điều tôi không biết. –

Các vấn đề liên quan