我正在尝试从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
如果您可以帮助修改名称上的重音标记,则可获得积分。此外,如果高度存在问题,是否有办法将其转换为公制?
提前谢谢!
答案 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"],
# ...
这应该让你开始。