我正在尝试从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)
撬函数的输出为:
"Miguel Almirón10nMidfieldern-nAsunción, ParaguayAge:n23nHT:n5' 9"nWT:n140n"
当放入csv时,它会在单个单元格中创建以下内容:
"Miguel Almirón10
Midfielder
-
Asunción, ParaguayAge:
23
HT:
5' 9""
WT:
140
"
我已经调查了事情并确定可能的节点()? 这是抛弃格式。
我在这里想要的结果是弄清楚如何将 pry 输出放入数组中,如下所示:
Miguel, Almiron, 10, Midfielder, Asuncion, Paraguay, 23, 5'9", 140
如果您可以帮助解决姓名上的重音符号,则可以获得奖励积分。另外,如果高度出现问题,有没有办法将其转换为公制?
提前谢谢你!
我已经调查过事情并确定它是可能的节点()? 这是抛弃格式。
是的,这就是为什么它以这种奇怪的格式显示,您可以strip
渲染的文本以删除多余的空格/行,然后您的文本将显示没有n
s
player_info = a.text.strip
[1] pry(main)> "Miguel Almirón10n".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'
这是我将使用的,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"],
# ...
这应该让你开始。