Ruby 试图通过瓦蒂尔和诺科吉里刮桌子

Ruby 试图通过瓦蒂尔和诺科吉里刮桌子,ruby,watir,Ruby,Watir,我是ruby的新手,我正在尝试刮一张桌子并把它放到csv上。我想从此url中删除表: 我需要记录表中的所有信息,从td class=c1到td class=c8。我的while循环无法正常工作,因此无法自动执行 我将发布我目前拥有的代码,但它基本上什么都不是 require 'watir' require 'open-uri' require 'net/http' require 'csv' require 'nokogiri' b = Watir::Browser.new :firefox

我是ruby的新手,我正在尝试刮一张桌子并把它放到csv上。我想从此url中删除表:

我需要记录表中的所有信息,从td class=c1到td class=c8。我的while循环无法正常工作,因此无法自动执行

我将发布我目前拥有的代码,但它基本上什么都不是

require 'watir'
require 'open-uri'
require 'net/http'
require 'csv'
require 'nokogiri'

b = Watir::Browser.new :firefox
b.goto 'http://www.inc.com/inc5000/list/2015/'
acount = 49
p = Nokogiri::HTML.parse(b.html)
company = p.css(css).text
company = []
puts css
#right > table > tbody > tr:nth-child(1) > td.c2
"#right > table > tbody > tr:nth-child(1) > td"
csscompany1 = ".cd2"
csscompany1 = ".cd"
css1 = "#right > table > tbody > tr:nth-child"
css2 = "(#count)"
css3 = " > td.c2"
while count != 49 do
acss = "#{css1}#{css2}#{css3}
company.push(p.css(acss).text)
count += 1
end 

看起来您过度指定了CSS选择器:

您需要类c1到c8的td元素,但这实际上是行中的所有单元格。 脚本在表的50行上进行迭代,但表实际上有更多的行。每10行有一个空白行。 脚本可以通过以下方式大大简化:

注意,您关心的行有一个数据行类。这将处理空白行的忽略。 使用Ruby内置的可枚举方法,该方法在集合上迭代,而无需担心索引。 运用这些原则:

require 'watir'
require 'nokogiri'

b = Watir::Browser.new :firefox
b.goto 'http://www.inc.com/inc5000/list/2015/'
p = Nokogiri::HTML.parse(b.html)

# Get the relevant rows
data_rows = p.css('tr.data_row')

# Iterate over each row
data = data_rows.map { |data_row|
  # For each row, collect the text of each td element
  data_row.css('td').map(&:text)
}

# data will be 2D matrix of the table
data
#=> [
#=>    ["1", "Ultra Mobile", "100,849%", "$118.2m", "Telecommunications", "California", "Los Angeles", "105"],
#=>    ["2", "TRYFACTA", "28,365%", "$34.4m", "IT Services", "California", "San Francisco", "221"],
#=>    etc.
#=> ]

如果你能把问题分解成一个问题,那会有帮助的。正如它现在读到的,它听起来像有3个组件-从原始表中抓取数据,导航到子页和从子页中抓取数据。然而,问题并不清楚,你到底在坚持哪一个,你到底想要什么,问题在哪里。提供一个更具体的问题会更容易得到有用的答案。嘿,贾斯汀!我会尽量简化这个问题;现在,我想做的就是从原始表中提取数据。我查看了网站。他们现在已经更改了,您试图获取的数据不再存储在表中,而是使用了div。