3

複数の値を返すNokogiriを使用してスクリプトを実行しています。結果は配列の形でなければならないという印象を受けました(そして複数の情報源から安心されました)。代わりに、私は醜い文字列を取得しています。これがコードです

require 'nokogiri'
require 'open-uri'
require 'spreadsheet'

profile_page_scraper = Nokogiri::HTML(open('http://www.crunchbase.com/company/facebook'))       
puts profile_page_scraper.css('div.col1_content td.td_left').text

これはこれを返します:

PublicDateRaisedPost IPO ValuationWebsiteBlogTwitterCategoryEmployeesFoundedDescription

これをすばやく修正するために使用できることはわかっていますmapが、なぜこれが配列を返さないのかについて混乱しています。理論的には、次のようなものを返す必要があります。

["Public", "Date", "Raised" ... "Description"]

これが機能しない理由はありますか?

4

2 に答える 2

7

NodeSet#text常に文字列を返します (それ以外の場合は、おそらく と呼ばれますNodeSet#texts)。Nokogiri のドキュメントはそれほど素晴らしいものではありません。疑わしい場合は、ソース コードを確認してください。

  # lib/nokogiri/xml/node_set.rb
  def inner_text
    collect{|j| j.inner_text}.join('')
  end
  alias :text :inner_text

テキストの配列を取得するには:nodes.map(&:text)

于 2012-11-02T17:39:40.723 に答える
1

メソッドは、 を含むのcssインスタンスを返しています。Nokogiri::XML::NodeSetEnumerable

require 'nokogiri'
require 'open-uri'

doc = Nokogiri::HTML(open('http://www.crunchbase.com/company/facebook'))  
nodes = doc.css('div.col1_content td.td_left')
nodes.class.ancestors
# => [Nokogiri::XML::NodeSet, Enumerable, Object, Kernel, BasicObject]

contentしたがって、この結果セットの各要素の属性と組み合わせて、すべての標準反復子を使用できます。例えば:

nodes.each { |n| puts n.content }
于 2012-11-02T17:40:30.710 に答える