【问题标题】:Syntax Error Ruby语法错误 Ruby
【发布时间】:2017-01-19 14:36:06
【问题描述】:

我有一个 Rails 应用程序,我正在从互联网上抓取数据。我有这个 sn-p 代码,它报告语法错误,从而阻止它运行。

我试图解决它,但无法找出问题所在。我哪里错了。

sn-p如下图:

def reuters
    ticker_sym = 'FB.O'
    reuters_home_url = "http://in.reuters.com"
    reuters_base_url = "http://in.reuters.com/finance/stocks/"
    board_members =  Nokogiri::HTML(open(reuters_base_url + 'companyOfficers?symbol=' + ticker_sym.to_s ))
    members = []
    table = board_members.css('.column1 tbody.dataSmall').first
    table_desc = board_members.css('.column1 tbody.dataSmall')[1]
    table.css('tr').each_with_index do |row,index|
      next if index == 0
      members << {
          name: row.css('td[1] h2 a').text.strip,
          title: row.css('td[4]').text.strip,
          position_held: row.css('td[3]').text.strip,
          age: row.css('td[2]').text.strip,
          member_link: URI.join(reuters_home_url,row.css('td[1] h2 a').attr("href")).to_s
          table_desc.css('tr').each_with_index do |col,index2|
            next if index2 == 0
            members << {
                description: col.css('td[2]').text.strip
            }
          end
        }
    end
  end

附上我的rails应用程序错误页面的截图,如下所示:

Rails error page

【问题讨论】:

  • 不要做row.css('td[1] h2 a').text之类的事情。使用atat_css 而不是css。你未来的自己会感谢你。
  • 有什么更好的方法来访问数据。为了简洁起见,你能用我的例子告诉我吗?我对 nokogiri 完全陌生
  • 基本问题是 NodeSet 的 text 方法会将所有文本连接在一起,通常会导致输出非常混乱。相反,您只想在节点上使用它。 stackoverflow.com/a/39477538/128421

标签: ruby-on-rails ruby syntax-error


【解决方案1】:

table_desc.css('tr').each_with_index do |col, index2| 之前添加} 并在这样结束之后删除}

def reuters
  ticker_sym = 'FB.O'
  reuters_home_url = "http://in.reuters.com"
  reuters_base_url = "http://in.reuters.com/finance/stocks/"
  board_members = Nokogiri::HTML(open(reuters_base_url + 'companyOfficers?symbol=' + ticker_sym.to_s))
  members = []
  table = board_members.css('.column1 tbody.dataSmall').first
  table_desc = board_members.css('.column1 tbody.dataSmall')[1]
  table.css('tr').each_with_index do |row, index|
    next if index == 0
    members << {
      name: row.css('td[1] h2 a').text.strip,
      title: row.css('td[4]').text.strip,
      position_held: row.css('td[3]').text.strip,
      age: row.css('td[2]').text.strip,
      member_link: URI.join(reuters_home_url, row.css('td[1] h2 a').attr("href")).to_s
    }
    table_desc.css('tr').each_with_index do |col, index2|
      next if index2 == 0
      members << {
        description: col.css('td[2]').text.strip
      }
    end
  end
end

【讨论】:

  • 语法错误问题已解决,但这并没有为我提供正确结构的数据。我希望 table_desc 数据在外循环内循环。基本上我想将 table_desc 数据作为键值对存储在第一个循环本身中。
  • @AhkshaeyRavi 您的问题是关于 Sintax 错误的;) 使用所有数据创建新问题。您可以使用它来寻求帮助:stackoverflow.com/help/how-to-ask
  • 我想要的只是一次循环'table'和'table_desc'节点集,这样我就可以在一个类似哈希的结构中获得所有必要的信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-19
相关资源
最近更新 更多