如何通过Mechanize和Nokogiri获取数据?

我正在开发一个从http://www.screener.in/获取HTML的应用程序。

我可以输入像“Atul Auto Ltd”这样的公司名称并提交它,并从下一页中删除以下详细信息:“CMP / BV”和“CMP”。

我正在使用此代码:

require 'mechanize' require 'rubygems' require 'nokogiri' Company_name='Atul Auto Ltd.' agent = Mechanize.new page = agent.get('http://www.screener.in/') form = agent.page.forms[0] print agent.page.forms[0].fields agent.page.forms[0]["q"]=Company_name button = agent.page.forms[0].button_with(:value => "Search Company") pages=agent.submit(form, button) puts pages.at('.//*[@id="top"]/div[3]/div/table/tbody/tr/td[11]') # not getting any output. 

代码将我带到正确的页面,但我不知道如何查询以获取所需的数据。

我尝试了不同的东西,但没有成功。

如果可能,有人可以指向我一个很好的教程,解释如何从HTML页面刮取特定的类。 第一个“CMP / BV”的XPath是:

 //*[@id="top"]/div[3]/div/table/tbody/tr/td[11] 

但它没有提供任何输出。

使用Nokogiri我会如下:

使用CSS选择器

 require 'nokogiri' require 'open-uri' doc = Nokogiri::HTML(open('http://www.screener.in/company/?q=Atul+Auto+Ltd.')) doc.class # => Nokogiri::HTML::Document doc.css('.table.draggable.table-striped.table-hover tr.strong td').class # => Nokogiri::XML::NodeSet row_data = doc.css('.table.draggable.table-striped.table-hover tr.strong td').map do |tdata| tdata.text end #From the webpage I took the below value from the table #*Peer Comparison Top 7 companies in the same business* row_data # => ["6.", # "Atul Auto Ltd.", # "193.45", # "8.36", # "216.66", # "3.04", # "7.56", # "81.73", # "96.91", # "17.24", # "2.92"] 

从网页上看表格,我可以看到CMP / BVCMP分别是第12和第3列。 现在我可以从数组row_data获取数据。 因此CMP是第二个索引, CMP / BV是数组row_data的最后一个值。

 row_data[2] # => "193.45" #CMP row_data.last # => "2.92" #CMP/BV 

使用XPATH

 require 'nokogiri' require 'open-uri' doc = Nokogiri::HTML(open('http://www.screener.in/company/?q=Atul+Auto+Ltd.')) p doc.at_xpath("//*[@id='peers']/table/tbody/tr[6]/td[3]").text p doc.at_xpath("//*[@id='peers']/table/tbody/tr[6]/td[10]").text # >> "193.45" #CMP # >> "17.24" #CMP/BV