Beltran, who had one of the Cardinals' five homers in their 9-6 series-opening win on Monday, hit a two-run homer off Ian Kennedy in the first, then cleared the bases with a shot into the swimming pool area in right-center in the second.
He has 10 home runs this season.
Jake Westbrook (4-2) blanked the Diamondbacks on four hits through seven innings.
Kennedy (3-2) threw five scoreless innings after Beltran's slam but the Diamondbacks lost for the sixth time in seven games. They have dropped nine of their past 11 at home.
The Cardinals won their third straight and can complete a three-game sweep in the desert on Wednesday night.
St. Louis catcher Yadier Molina left the game in the ninth inning after being hit in the back of his gloved hand trying to snag a pitch by reliever Mitchell Boggs.
Westbrook struck out eight and walked two. Only one Arizona base runner reached second against the sinker-throwing St. Louis right-hander. Aaron Hill singled three times off Westbrook, two of them infield hits.
Jon Jay opened the game with a triple past diving center fielder Gerardo Parra, then Beltran hit Kennedy's 1-0 pitch deep into the right field seats to make it 2-0 in a hurry.
The Cardinals, who led 3-0 after one and 7-0 after five on Monday night, took a 6-0 lead in the second as Kennedy struggled with his control. Skip Schumaker doubled with one out, then Westbrook drew a two-out walk. Jay was hit by a pitch to load the bases and bring up Beltran, who lofted a 2-1 pitch into the swimming pool area in right field for the 32nd multi-home run game of his career.
Kennedy settled down after that, retiring the last 13 batters he faced, 15 of the last 16. He struck out Beltran twice. But the damage was done.
The Arizona ace, who went 21-4 last season, lost consecutive starts for the first time since September 2010. He was beaten 2-1 at Washington last Wednesday, ending his nine-game winning streak. The six runs were the most he has allowed in his past 23 outings.
Kennedy struck out six, walked two and hit a batter.
The Diamondbacks averted a shutout when Justin Upton led off the ninth with a single and scored on Miguel Montero's double.
Notes: St. Louis has scored in the first inning for eight games in a row. ... The Cardinals' five homers in Monday night's game were their most since hitting six on July 5, 2007, against Pittsburgh. ... Beltran needs two stolen bases to become the eighth player in major league history with at least 300 steals and 300 homers. ... Beltran had his second multi-homer game of the season. ... Kennedy hadn't allowed this many runs since giving up seven at Oakland last July 3. ... The Cardinals go with Kyle Lohse (4-1, 2.11 ERA) while Arizona sends left-handed rookie Wade Miley (3-0, 2.33) to the mound in the series finale. ... Arizona failed to score in 12 innings against St. Louis' starters in the first two games of the series. ... The Diamondbacks' Cody Ransom struck out four times, giving him seven in two games.