You can use selenium to load the page, and then BeautifulSoup to find the player attributes:
from selenium import webdriver
from bs4 import BeautifulSoup as soup
import re
import collections
player = collections.namedtuple('player', ['name', 'position', 'stats'])
d = webdriver.Chrome('/Users/jamespetullo/Downloads/chromedriver')
d.get('http://www.espn.com/mlb/boxscore?gameId=370403101')
player_names = iter([b.text for b in soup(d.page_source, 'lxml').find_all('td', {'class':'name'})])
full_stats = [i.text for i in h.find_all('td', {'class':re.compile('batting-stats')})]
final_results = {next(player_names):full_stats[i:i+11] for i in range(0, len(full_stats), 11)}
final_players = [player(*[re.sub('[A-Z\d\-\s\(\),]+$', '', a), (lambda x:'N/A' if not x else x[0])(re.findall('[A-Z\d\-\s\(\),]+$', a)), b]) for a, b in final_results.items()]
Output:
[player(name=u'K. Morales', position=u'DH', stats=[u'0-4', u'4', u'0', u'0', u'1', u'1', u'1', u'21', u'.000', u'.200', u'.000']), player(name=u'C. Gentry', position=u'PR-RF', stats=[u'0-1', u'1', u'0', u'0', u'0', u'0', u'0', u'2', u'.000', u'.000', u'.000']), player(name=u'D. Travis', position=u'2B', stats=[u'2-6', u'6', u'0', u'2', u'0', u'0', u'2', u'16', u'.333', u'.333', u'.333']), player(name=u'J. Smith', position='N/A', stats=[u'1-4', u'4', u'1', u'1', u'0', u'1', u'0', u'19', u'.250', u'.400', u'.500']), player(name=u'a - D. Barney', position=u'PH-LF', stats=[u'0-1', u'1', u'0', u'0', u'0', u'0', u'1', u'4', u'.000', u'.000', u'.000']), player(name=u'M. Machado', position=u'3B', stats=[u'0-4', u'4', u'0', u'0', u'0', u'0', u'1', u'11', u'.000', u'.000', u'.000']), player(name=u'J. Bautista', position=u'RF', stats=[u'0-5', u'5', u'0', u'0', u'0', u'1', u'1', u'21', u'.000', u'.167', u'.000']), player(name=u'J. Donaldson', position=u'3B', stats=[u'3-5', u'5', u'0', u'3', u'0', u'1', u'0', u'23', u'.600', u'.667', u'.600']), player(name=u'J.P. Howell', position='N/A', stats=[u'0-0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'.000', u'.000', u'.000']), player(name=u'H. Kim', position=u'LF', stats=[u'0-0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'.000', u'.000', u'.000']), player(name=u'M. Trumbo', position=u'DH', stats=[u'1-4', u'4', u'1', u'1', u'0', u'0', u'1', u'14', u'.250', u'.250', u'.500']), player(name=u'J. Rickard', position=u'LF', stats=[u'1-4', u'4', u'1', u'1', u'0', u'1', u'0', u'19', u'.250', u'.400', u'.500']), player(name=u'S. Pearce', position=u'1B-LF', stats=[u'3-5', u'5', u'1', u'3', u'0', u'0', u'0', u'8', u'.600', u'.600', u'.600']), player(name=u'T. Tulowitzki', position=u'SS', stats=[u'0-5', u'5', u'0', u'0', u'0', u'0', u'0', u'23', u'.000', u'.000', u'.000']), player(name=u'C. Davis', position=u'1B', stats=[u'9-39', u'39', u'3', u'9', u'3', u'2', u'5', u'152', u'', u'', u'']), player(name=u'R. Martin', position=u'C', stats=[u'0-3', u'3', u'0', u'0', u'0', u'2', u'2', u'26', u'.000', u'.400', u'.000']), player(name=u'b - J. Smoak', position=u'PH-1B', stats=[u'0-1', u'1', u'0', u'0', u'0', u'0', u'1', u'5', u'.000', u'.000', u'.000']), player(name=u'', position=u'TEAM', stats=[u'2-5', u'5', u'1', u'2', u'2', u'0', u'0', u'13', u'.400', u'.400', u'1.200']), player(name=u'J. Biagini', position='N/A', stats=[u'1-1', u'1', u'0', u'1', u'0', u'0', u'0', u'5', u'1.000', u'1.000', u'1.000']), player(name=u'J.J. Hardy', position=u'SS', stats=[u'1-5', u'5', u'0', u'1', u'1', u'0', u'2', u'22', u'.200', u'.200', u'.200']), player(name=u'E. Carrera', position=u'LF', stats=[u'2-3', u'3', u'0', u'2', u'1', u'0', u'0', u'12', u'.667', u'.667', u'1.000']), player(name=u'J. Schoop', position=u'2B', stats=[u'1-4', u'4', u'0', u'1', u'0', u'1', u'1', u'23', u'.250', u'.400', u'.250']), player(name=u'A. Jones', position=u'CF', stats=[u'0-4', u'4', u'0', u'0', u'0', u'0', u'0', u'13', u'.000', u'.000', u'.000']), player(name=u'S. Smith', position=u'RF', stats=[u'2-4', u'4', u'0', u'2', u'0', u'0', u'0', u'15', u'.500', u'.500', u'.750']), player(name=u'A. Loup', position='N/A', stats=[u'1-4', u'4', u'0', u'1', u'0', u'1', u'1', u'23', u'.250', u'.400', u'.250']), player(name=u'M. Estrada', position='N/A', stats=[u'1-4', u'4', u'1', u'1', u'0', u'0', u'1', u'14', u'.250', u'.250', u'.500']), player(name=u'K. Pillar', position=u'CF', stats=[u'1-4', u'4', u'1', u'1', u'0', u'1', u'0', u'20', u'.250', u'.400', u'.250']), player(name=u'W. Castillo', position=u'C', stats=[u'1-1', u'1', u'0', u'1', u'0', u'0', u'0', u'5', u'1.000', u'1.000', u'1.000']), player(name=u'J. Grilli', position=u' (L, 0-1)', stats=[u'1-5', u'5', u'0', u'1', u'1', u'0', u'2', u'22', u'.200', u'.200', u'.200']), player(name=u'a - T. Mancini', position=u'PH', stats=[u'0-3', u'3', u'0', u'0', u'0', u'0', u'0', u'15', u'.000', u'.000', u'.000'])]
The result also yields the full stats for "D. Travis":
[u'2-6', u'6', u'0', u'2', u'0', u'0', u'2', u'16', u'.333', u'.333', u'.333']