2017-01-19 56 views
-1

我有一个rails应用程序,其中我从互联网上抓取数据。我有这个代码片段,它报告语法错误,从而阻止它运行。语法错误Ruby

我试图整理出来,但无法找出哪里出了什么问题。我哪里错了。

的片段如下:

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

+0

不要做像'row.css('td [1] h2 a')。text'这样的事情。使用'at'或'at_css'而不是'css'。你未来的自我会感谢你。 –

+0

什么可能是更好的访问数据的方式。为了简洁起见,您可以使用我的示例向我展示。我对nokogiri完全陌生 –

+0

基本的问题是NodeSet的'text'方法会将所有文本连接在一起,通常会导致非常混乱的输出。相反,您只想在节点上使用它。 http://stackoverflow.com/a/39477538/128421 –

回答

0

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 
+0

语法错误问题已得到解决,但没有给我正确结构中的数据。我希望table_desc数据在外层循环内循环。基本上我想将table_desc数据作为关键值对存储在第一个循环中。 –

+0

@AhkshaeyRavi你的问题是关于Sintax错误;)用所有数据创建一个新问题。你可以使用这个帮助:http://stackoverflow.com/help/how-to-ask –

+0

所有我想循环'table'和'table_desc'节点集在一个去,这样我得到所有必要的信息在一个单一的哈希像结构。 –