Nokogiri:清理数据输出

时间:2017-09-13 07:09:32

标签: ruby-on-rails nokogiri pry

我正在尝试从MLS网站抓取玩家信息,以创建玩家来自哪里的地图,以及其他信息。我对此感到陌生。

到目前为止,我已经使用了这段代码:

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)

pry函数的输出是:

"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)?这就是抛弃格式化。

我想要的结果是弄清楚如何将pry输出放入数组中,如下所示:

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

如果您可以帮助修改名称上的重音标记,则可获得积分。此外,如果高度存在问题,是否有办法将其转换为公制?

提前谢谢!

2 个答案:

答案 0 :(得分:0)

  

我已经研究过并确定它有可能是节点(\ n)?这就是抛弃格式化。

是的,这就是为什么它以这种奇怪的格式显示,您可以strip渲染的文字删除多余的空格/行,然后您的文字将显示没有\n s

player_info = a.text.strip

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

如果您希望按此顺序将其存储在CSV中,则只会删除\n 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'了解

答案 1 :(得分:0)

这就是我要用的东西,i18n和人物宝石:

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"],
# ...

这应该让你开始。