2017-01-19 78 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'節點集在一個去,這樣我得到所有必要的信息在一個單一的哈希像結構。 –