0

私は簡単なスクリプトを書きました:

require 'rubygems'
require 'nokogiri'
require 'open-uri'

url = "http://au.finance.yahoo.com/q/bs?s=MYGN"
doc = Nokogiri::HTML(open(url))
name = doc.at_css("#yfi_rt_quote_summary h2").text
market_cap = doc.at_css("#yfs_j10_mygn").text
ebit = doc.at("//*[@id='yfncsumtab']/tbody/tr[2]/td/table[2]/tbody/tr/td/table/tbody/tr[11]/td[2]/strong").text


puts "#{name} - #{market_cap} - #{ebit}"

このスクリプトは、Yahoo ファイナンスから 3 つの値を取得します。問題は、ebitXPath が nil を返すことです。XPath を取得する方法は、Chrome 開発者ツールとコピー アンド ペーストを使用することでした。

これはhttp://au.finance.yahoo.com/q/bs?s=MYGNから値を取得しようとしているページで、実際の値は483,992行にありtotal current assetsます。

特に CSS セレクターを使用してこの値を取得する方法がある場合は、助けていただければ幸いです。

4

2 に答える 2

2

のこぎりは以下をサポートしています。

require 'nokogiri'
require 'open-uri'

doc = Nokogiri::HTML(open("http://au.finance.yahoo.com/q/bs?s=MYGN"))
ebit = doc.at('strong:contains("Total Current Assets")').parent.next_sibling.text.gsub(/[^,\d]+/, '')

puts ebit
# >> 483,992

<strong>タグを:contains疑似クラスのプレースマーカーとして使用してから、含まれている に戻り<td>、次の場所に移動して<td>そのテキストを取得し、最後に空白をgsub(/[^,\d]+/, '')削除して、数値ではないすべてのものを削除しますまたはコンマ。

Nokogiri は多くの jQuery の JavaScript 拡張機能をサポートしているため、:contains機能します。

于 2013-11-06T16:01:38.897 に答える