Their box score is just a space-delimited text file. So, the first thing to parse for is the rosters. They'll be after the score and shots, so the earliest row that they can be in is 20 (assuming you've grabbed the whole header). I check the position for a W, C, or F to indicate a forward; D and G are pretty straightforward. The uniform number can be ignored. The points are slightly annoying to parse because Excel keeps wanting to make them into dates, but you shouldn't have that difficulty if you deal with it in python.
Getting all the way past the goals / penalties box score is slightly cumbersome, but I just skip down to Row 52 (even a game with no goals or penalties has at least that many rows) and check Columns 3 - 11 for "Goaltending." You have to go all the way to column 11 because of the US U-18 team. The goalie parsing was done to quickly check for complete game shutouts and because the decision would be inside parenthesis. Since you're doing it by save percentage, you might need to do that by hand.