2017-09-13 101 views
0

我試圖從MLS網站上抓取玩家信息來創建玩家來自哪裏的地圖以及其他信息。隨着它的發展,我對這件事情是新的。Nokogiri:清理數據輸出

到目前爲止,我已經使用這個代碼:

require 'HTTParty' 
require 'Nokogiri' 
require 'JSON' 
require 'Pry' 
require 'csv' 

page = HTTParty.get('https://www.atlutd.com/players') 

parse_page = Nokogiri::HTML(page) 

players_array = [] 

parse_page.css('.player_list.list-reset').css('.row').css('.player_info').map do |a| 
    player_info = a.text 
    players_array.push(player_info) 
end 

#CSV.open('atlantaplayers.csv', 'w') do |csv| 
# csv << players_array 
#end 

pry.start(binding) 

撬函數的輸出是:

"Miguel Almirón10\nMidfielder\n-\nAsunción, ParaguayAge:\n23\nHT:\n5' 9\"\nWT:\n140\n" 

其中投入CSV時,在一個單元格創建此

"Miguel Almirón10 
Midfielder 
- 
Asunción, ParaguayAge: 
23 
HT: 
5' 9"" 
WT: 
140 
" 

我查看過東西,並確定它可能是節點(\ n)?這是拋棄格式。

我想要的結果,在這裏是要弄清楚如何獲得撬輸出到數組如下:

Miguel, Almiron, 10, Midfielder, Asuncion, Paraguay, 23, 5'9", 140 

獎勵積分,如果你能與名字重音符號幫助。另外,如果高度有問題,是否有方法將其轉換爲度量標準?

預先感謝您!

回答

0

我調查過的東西,並確定它是可能的節點(\ n)?這是拋棄格式。

是的,這就是爲什麼它顯示在這個奇怪的格式,你可以strip呈現的文本,以除去多餘的空格/行那麼你的文字會顯示沒有\n小號

player_info = a.text.strip 

[1] pry(main)> "Miguel Almirón10\n".strip 
=> "Miguel Almirón10" 

這隻會刪除\n如果你希望按照這個順序將它們存儲在一個CSV文件中 Miguel, Almiron, 10, Midfielder, Asuncion, Paraguay, 23, 5'9", 140 那麼你可能想要用空格拆分然後爲每一行創建一個數組,所以當將行推送到CSV文件時,它看起來像這樣:

csv << ["Miguel", "Almiron", 10, "Midfielder", "Asuncion", "Paraguay", 23, "5'9\"", 140] 

與名字重音符號

可以使用transliterate方法,它將刪除口音

[8] pry(main)> ActiveSupport::Inflector.transliterate("Miguel Almirón10") 
=> "Miguel Almiron10" 

http://api.rubyonrails.org/classes/ActiveSupport/Inflector.html#method-i-transliterate,你可能要require 'rails'

0

這是我會用,國際化和人的寶石:

require 'people' 
require "i18n" 

I18n.available_locales = [:en] 
@np = People::NameParser.new 

players_array = [] 

parse_page.css('.player_info').each do |div| 
    name = @np.parse I18n.transliterate(div.at('.name a').text) 
    players_array << [ 
    name[:first], 
    name[:last], 
    div.at('.jersey').text, 
    div.at('.position').text, 
    ] 
end 

# => [["Miguel", "Almiron", "10", "Midfielder"], 
# ["Mikey", "Ambrose", "22", "Defender"], 
# ["Yamil", "Asad", "11", "Forward"], 
# ... 

這應該讓你開始。