我写了一个简单的脚本:
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}"
该剧本从雅虎财经中攫取了三个价值观。问题是ebit
XPath返回nil。我获得XPath的方式是使用Chrome开发人员工具并复制和粘贴。
这是我尝试从http://au.finance.yahoo.com/q/bs?s=MYGN获取值的页面,483,992
行中的实际值为total current assets
。
任何帮助都会受到赞赏,特别是如果有一种方法可以通过CSS选择器获得此值。
答案 0 :(得分: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
有效的原因。
答案 1 :(得分: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"