The Cubs won their fifth straight game, coming on the heels of a five-game losing streak. The White Sox have lost seven straight and 11 of 12 and, at 9-27, are the only major league team not to have reached 10 wins.
The mostly unfulfilled threat of storms delayed the start of the game for more than two hours.
The White Sox tried to rally in the top of the ninth, getting a swinging bunt single from Leury Garcia to lead off the frame. A two-base error on Cubs right fielder Kris Bryant on a fly ball hit by Trayce Thompson put runners at second and third with nobody out.
The Cubs brought in closer Brandon Morrow, who struck out pinch hitter Yolmer Sanchez and Daniel Palka but walked Tim Anderson to load the bases.
However, Morrow retired slugger Jose Abreu on a grounder to first base to complete his ninth save.
The Cubs, who scored five runs in the first inning in Friday's 11-2 rout of the White Sox, jumped on starter James Shields (1-4) right away on Saturday.
Before a man had been retired, Anthony Rizzo smacked a three-run home run to the opposite field into the wind in left-center, his sixth homer of the season.
Cubs rookie David Bote added an RBI single before Shields ended the first inning, having thrown 36 pitches.
The Cubs added a run in the second on a single by Contreras, fresh off his two-homer, seven-RBI game on Friday. Contreras added another home run, a two-run shot, in the seventh inning on Saturday, his fourth of the season, giving him 19 RBIs on the year.
Contreras finished with three hits on the day.
Cubs starter Jon Lester (3-1), meanwhile, gave up only one run in 5 2/3 innings.
The only run he gave the White Sox scored on a groundout by Abreu in the sixth inning, plating Adam Engel, who led off with a double among his three hits on the day. A subsequent walk to Matt Davidson and single by Welington Castillo ended Lester's day.
Lefty Justin Wilson came on to get Jose Rondon to ground into an inning-ending forceout.
Lester allowed four hits and three walks to go with five strikeouts.
The White Sox pulled closer in the eighth inning on Davidson's 10th home run of the season, a three-run blast to right field off the Cubs' third pitcher, Carl Edwards Jr.
Shields settled down after the first inning. At one point, he retired 11 batters in a row between the second and sixth innings.
In six innings, he gave up five runs on seven hits, with three walks and four strikeouts. He threw 100 pitches.
White Sox righty reliever Chris Beck allowed Contreras' two-run home run in the seventh, and lefty Aaron Bummer issued a walk to force in another run later in the inning.
--Field Level Media
Chi. White Sox | Chi. Cubs | |
James Shields | Player | Jon Lester |
Loss | W/L | Win |
6.0 | IP | 5.2 |
4 | Strikeouts | 5 |
7 | Hits | 4 |
7.50 | ERA | 1.59 |
Chi. White Sox | Chi. Cubs | |
Adam Engel | Player | Willson Contreras |
3 | Hits | 3 |
0 | RBI | 3 |
0 | HR | 1 |
4 | TB | 6 |
.750 | Avg | .600 |
Team | Hits | HR | TB | Avg | LOB | K | RBI | BB | SB | Errors |
Chi. White Sox | 8 | 1 | 13 | .229 | 19 | 9 | 4 | 4 | 0 | 0 |
Chi. Cubs | 9 | 2 | 17 | .273 | 16 | 4 | 8 | 8 | 2 | 1 |