2016-08-24 15 views
0

NokogiriのCSSメソッドを使用してHTMLからいくつかの名前を取得しようとしています。NokogiriのCSSメソッドを使ってaltタグ内のすべての要素を取得する

これは、HTMLの例です:

<section class="container partner-customer padding-bottom--60"> 
    <div> 
     <div> 
      <a id="technologies"></a> 
      <h4 class="center-align">The Team</h4> 
     </div> 
    </div> 
    <div class="consultant list-across wrap"> 
     <div class="engineering"> 
      <img class="" src="https://v0001.jpg" alt="Person 1"/> 
      <p>Person 1<br>Founder, Chairman &amp; CTO</p> 
     </div> 
     <div class="engineering"> 
      <img class="" src="https://v0002.png" alt="Person 2"/></a> 
      <p>Person 2<br>Founder, VP of Engineering</p> 
     </div> 
     <div class="product"> 
      <img class="" src="https://v0003.jpg" alt="Person 3"/></a> 
      <p>Person 3<br>Product</p> 
     </div> 
     <div class="Human Resources &amp; Admin"> 
      <img class="" src="https://v0004.jpg" alt="Person 4"/></a> 
      <p>Person 4<br>People &amp; Places</p> 
     </div> 
     <div class="alliances"> 
      <img class="" src="https://v0005.jpg" alt="Person 5"/></a> 
      <p>Person 5<br>VP of Alliances</p> 
     </div> 

私は私のpeople.rakeファイルで、これまで持っていることは以下の通りです:

staff_site = Nokogiri::HTML(open("https://www.website.com/company/team-all")) 
    all_hands = staff_site.css("div.consultant").map(&:text).map(&:squish) 

私は少し問題内のすべての要素を取得したのですalt=""タグ(人物の名前)です。いくつかのdivの下にネストされています。

現在、div.consultantを使用して、alt=の人の名前ではなく、すべての名前+ロール、つまりPerson 1Founder, Chairman; CTOを取得します。

私は単純にalt内の要素を取得できますか?

+0

「[mcve]」をお読みください。あなたのHTMLは無効です。終了タグが正しい場所にあることを確認してください。それらがなければ、ノコギリはあなたが思っているところから彼らを置くでしょう。期待される成果は? –

答えて

1

希望する出力が明確でなく、HTMLが壊れています。これで

スタート:

require 'nokogiri' 

doc = Nokogiri::HTML('<html><body><div class="consultant"><img alt="foo"/><img alt="bar" /></div></body></html>') 
doc.search('div.consultant img').map{ |img| img['alt'] } # => ["foo", "bar"] 

cssの出力にtextを使用することは良いアイデアではありません。 cssはNodeSetを返します。

doc = Nokogiri::HTML('<html><body><p>foo</p><p>bar</p></body></html>') 
doc.search('p').text # => "foobar" 

この動作は次のとおりです。多くの場合、最終的には、恐ろしいコードである、再び離れてそれを引っ張っする方法を見つけ出すために、あなたを強制的にマングルされたテキストコンテンツにつながる連結されている全てのテキスト、中にノードセットの結果に対してtextNodeSet#textで文書化:

は、すべて含まれているノードの内部テキストが代わりに

をオブジェクトを取得し使用text(AKA inner_textまたはcontent)個々のノードに対しては、そのノードの正確なテキストで、その結果、あなたが望むようあなたが参加できること:

は、このノードのコンテンツ

doc.search('p').map(&:text) # => ["foo", "bar"] 

参照してください「How to avoid joining all text from Nodes when scraping」を返します。また、

関連する問題