如何在Ruby中使用Nokogiri解析网页?

如何在Ruby中使用Nokogiri解析网页?,ruby,html-parsing,nokogiri,Ruby,Html Parsing,Nokogiri,我正在使用Nokogiri解析html。对于显示的网站,我试图创建一个哈希数组,其中每个哈希将包含网站上显示的给定评论的优点、缺点和建议部分。我很难做到这一点,并希望在这里得到一些建议。当我返回某个元素时,我没有在站点上显示正确的内容。有什么想法吗 require 'open-uri' require 'nokogiri' # Perform a google search doc = Nokogiri::HTML(open('http://www.glassdoor.com/Reviews/

我正在使用Nokogiri解析html。对于显示的网站,我试图创建一个哈希数组,其中每个哈希将包含网站上显示的给定评论的优点、缺点和建议部分。我很难做到这一点,并希望在这里得到一些建议。当我返回某个元素时,我没有在站点上显示正确的内容。有什么想法吗

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
需要“打开uri”
需要“nokogiri”
#执行谷歌搜索
doc=Nokogiri::HTML(打开)http://www.glassdoor.com/Reviews/Microsoft-Reviews-E1651.htm'))
评论=[]
当前_review=Hash.new
doc.css('.employerReview')。每个do |项|
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
当前_review={'pro'=>pro',con'=>con',advice'=>advice}
评论请尝试以下方法:

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=[]
doc.css('.employerReview')。每个do |项|
pro,con,advice=item.css('.description.notranslate text()').map(&:to_s)
评论专业版,'con'=>con,'advice'=>advice}
结束
ruby也更喜欢使用符号键,所以除非您需要它们是字符串,否则我会这样做

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

reviews当我发布评论[0]['pros']时,它不会返回网站上看到的全文。我想这是因为css选择器,这正是我想要弄清楚的。第一,它是
'pro'
,而不是
'pros'
,第二,它对我很有效:
对于这样一个大的组织来说,官僚作风很少。通常倾向于以有限的计划快速前进。
我的意思是专业,这就是我代码中的内容。这很奇怪,这不是我在页面上看到的第一个pro条目的文本…啊,它只是改变了。可能是刷新,因为您可能正在对照旧页面进行检查