Weaver (14-1) ran his unbeaten streak to 11 games and notched his eighth win in eight starts, holding the Rangers to two runs on five hits over 6 1/3 innings, walking one and striking out three.
The Angels' ace ended up yielding a pair of runs in the seventh when Josh Hamilton and Michael Young singled and David Murphy delivered a two-run double with one out to provide the Rangers' only offense.
Pujols socked his 19th and 20th homers of the season -- his 43rd career multi-homer game -- while Mike Trout added a two-run shot and scored twice for the the Angels, took a 2-0 lead in their key four-game set against American League West-leading Texas.
Los Angeles, which entered the game in third place in the AL West, pulled to within three games of Texas.
The Rangers' Derek Holland (7-6) was saddled with the loss after yielding six runs on five hits over 6 2/3 frames.