The Cardinals have won six of their last seven and have split the first two outings in the four-game series.
Beltran tripled home Matt Carpenter in the opening frame and then scored on Craig's single. Carpenter doubled in the other St. Louis run to give the Cardinals a 3-1 lead in the seventh.
Joe Kelly (1-3) lasted 5 1/3 innings to get the win, giving a run on three hits. Four relievers then combined to give up a run on two hits in 2 2/3 and Edward Mujica needed just six pitches in the ninth to collect his 26th save.
Carlos Villanueva (2-5) surrendered two runs on four hits in six innings to take the loss. He retired the last 12 men he faced.
Chicago had won five out of six coming into the game.
Exploding whale video goes viral on Internet
'SNL': 'Anchorman 2' cast, One Direction sing 'Afternoon Delight' [VIDEO]