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 Finance 获取三个值。问题是ebitXPath 返回 nil。我获得 XPath 的方式是使用 Chrome 开发人员工具并进行复制和粘贴。

这是我试图从http://au.finance.yahoo.com/q/bs?s=MYGN获取值的页面,实际值在行中483,992total current assets

任何帮助将不胜感激,特别是如果有办法使用 CSS 选择器获取此值。

4

2 回答 2

2

Nokogiri 支持:

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 回答
0

这似乎对我有用

doc.css("table.yfnc_tabledata1 tr[11] td[2]").text.tr(",","").to_i
#=> 483992

或作为字符串

doc.css("table.yfnc_tabledata1 tr[11] td[2]").text.strip.gsub(/\u00A0/,"")
#=> "483,992"
于 2013-11-06T14:22:31.130 回答