Weaver (6-1) bounced back from a poor outing against Texas to turn in a seven-inning effort. He gave up both runs and all three hits while striking out four. He had been roughed up for eight runs on 10 hits in 3 1/3 in his previous start against the Rangers.
Weaver also scored a run in the fifth on a triple by Mike Trout, who then scored on Mark Trumbo's double. Weaver led off the fifth with a single, just the fifth hit in his six-year career.
The Angels eventually scored three runs in the fifth to take a 4-0 lead, but the Padres cut their deficit in half through seven innings.
Los Angeles put the game away in the ninth with three more runs, two of them coming in on a double by Erick Aybar. Free-agent acquisition Albert Pujols went 1-for-4, extending his hitting streak to seven games.
Jeff Suppan (2-2) took the loss, allowing four runs on six hits with five walks in five innings.