2017-09-13 73 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"], 
# ... 

这应该让你开始。