如何在Ruby中的Nokogiri中刮取span名称?

时间:2018-10-15 12:43:28

标签: ruby-on-rails nokogiri

我想从网站上抓取数据。数据在跨度名称中。 html看起来像这样:

<p class="text-muted text-small">
  <span class="text-muted">Votes:</span>
  <span name="nv" data-value="1564808">1,564,808</span>
  <span class="ghost">|</span>                
  <span class="text-muted">Gross:</span>
  <span name="nv" data-value="107,928,762">$107.93M</span>
</p>

因此,我想搜索整个页面并获得data-value的值,此处为1,564,808,而不是107.93M值。

我尝试了各种方法来获取数据。像这样的例子:

@votes = []
html_content = 
open("https://www.imdb.com/list/ls057823854/sort=list_order,asc&st_
dt=&mod e=detail&page=1").read
doc = Nokogiri::HTML(html_content)
doc.css(".text-muted['span name=nv']").each do |i|
@votes << i.text.strip

1 个答案:

答案 0 :(得分:0)

尝试以下代码:

doc.css('div.lister-item-content > p.text-muted > span[name = nv]:nth-child(2)').map(&:text)

结果:

["1,564,941", "373,745", "2,004,624", "1,077,404", "887,189", "305,554", "207,904", "1,074,609", "748,393", "789,255", "1,224,753", "754,008", "634,752", "1,056,328", "1,604,158", "1,438,194", "629,504", "1,158,452", "517,609", "539,263", "1,443,979", "1,290,159", "161,981", "830,992", "1,427,193", "299,532", "289,184", "705,138", "615,264", "1,147,650", "1,030,826", "1,018,932", "921,730", "524,568", "557,482", "1,973,773", "813,743", "367,587", "342,800", "188,210", "649,467", "1,068,455", "547,990", "527,123", "805,964", "420,447", "441,780", "318,295", "1,004,742", "446,096", "203,977", "581,108", "1,754,019", "616,804", "484,534", "265,048", "958,244", "289,190", "651,605", "503,185", "320,564", "660,685", "476,016", "432,155", "588,572", "374,705", "378,561", "337,801", "463,467", "508,822", "187,810", "1,128,184", "221,361", "261,529", "322,314", "324,435", "116,258", "318,628", "1,334,595", "222,651", "1,155,754", "228,713", "205,956", "271,162", "293,774", "33,136", "80,385", "703,048", "195,712", "274,244", "233,133", "121,874", "208,462", "513,797", "485,112", "120,750", "135,232", "57,411", "125,431", "297,193"]