2013-04-10 39 views
0

我正在使用Nokogiri来解析html。对于显示的网站,我试图创建一个哈希数组,其中每个哈希将包含站点上显示的给定评论的优点,缺点和建议部分。我在这样做时遇到了麻烦,希望在这里提供一些建议。当我返回某个元素时,我没有在网站上显示正确的内容。有任何想法吗?如何在Ruby中使用Nokogiri解析网页?

require 'open-uri' 
require 'nokogiri' 

# Perform a google search 
doc = Nokogiri::HTML(open('http://www.glassdoor.com/Reviews/Microsoft-Reviews-E1651.htm')) 

reviews = [] 


current_review = Hash.new 

doc.css('.employerReview').each do |item| 
    pro = item.parent.css('p:nth-child(1) .notranslate').text 
    con = item.parent.css('p:nth-child(2) .notranslate').text 
    advice = item.parent.css('p:nth-child(3) .notranslate').text 

    current_review = {'pro' => pro, 'con' => con, 'advice' => advice} 

    reviews << current_review 
end 

回答

1

试试这个:

reviews = [] 
doc.css('.employerReview').each do |item| 
    pro, con, advice = item.css('.description .notranslate text()').map(&:to_s) 
    reviews << {'pro' => pro, 'con' => con, 'advice' => advice} 
end 

它也与红宝石最好使用符号键,所以,除非你需要他们的字符串,我会做

reviews << { pro: pro, con: con, advice: advice } 
+0

当我有把评论[0] ['专业人员]],它不会返回在网站上看到的全文。我认为这是由于CSS选择器,这是我试图找出。 – sharataka 2013-04-10 18:09:23

+0

它的第一个“pro”而不是“pros”,第二个对我来说很有效:“对于这样一个大型组织来说,官僚程度很低。通常趋向于有限的计划快速移动。' – AJcodez 2013-04-10 18:11:48

+0

我的意思是亲,这就是我的代码。这很奇怪,那不是我看到的页面上的第一个专业词条的文本... – sharataka 2013-04-10 18:13:13