"Not a bad finish after what went on in Washington," manager Dale Sveum said. "To come back and win five out of the last six was huge. Tonight was a nicely-played game."
Wood allowed four hits and one run with a season-high 108 pitches, striking out six and walking just one. Since Aug. 22, Wood has a 2.43 ERA in 33 1/3 innings. His ERA on the season is down to 4.23 after it spiked to 4.98 at the end of July.
"The ball's coming out good," Wood said. "I've been able to locate pitches. I just want to finish the season strong and show them I can handle a full season."
For the second straight start, the 25-year-old tossed four hitless innings to open the game. Justin Maxwell singled through the left side of the infield to start the fifth.
The next batter, Matt Dominguez, hit a ball high to left field. Alfonso Soriano, standing at the scoreboard on the left-field wall, leapt to make a tremendous catch.
Maxwell, thinking the ball would fall in for a hit, was already past second base, so Soriano threw to relay man Darwin Barney, who threw to first for the double play.
"[Soriano's] not typically been known for his defense, but his defense has been outstanding this year," Wood said. "He put in a lot of work in spring and this offseason to get ready for this season. He's made several outstanding catches for me this year."
Soriano, who hit his 29th homer in the fifth inning and finished a triple shy of the cycle, didn't want to talk about his hitting after the game. He wanted to chat about his improved defense.
"I think I've proved a lot of people wrong," Soriano said.
The only run Wood allowed came in the eighth after Brandon Barnes doubled and pinch-hitter Fernando Martinez singled off reliever Shawn Camp.
"[Wood] got a little tired there at the end, but he did a heck of a job," Sveum said.
"We were no-hit going into the fifth inning, and their pitcher threw well for them today," Astros interim manager Tony DeFrancesco said. "He mixed pitches in and kind of dominated us for a while. He threw a lot of off-speed pitches that were cutting in on our hitters and we just didn't make the adjustment there. You've got to give the kid some credit."
The Astros loaded the bases with two outs in the eighth, but Camp struck out J.D. Martinez to keep a three-run lead. Carlos Marmol walked Maxwell to open the ninth, but struck out the next three Astros to end the game. Marmol's ERA in his last 21 games is 1.66 (21 2/3 innings).
The Cubs grabbed the lead for good in the first inning. Barney singled, moved to second on a fielder's choice and raced to third on a wild pitch from Fernando Abad. Wellington Castillo brought Barney home with a single.
In the second, third and fourth innings, the Cubs stranded runners. Soriano's solo homer in the fifth gave the Cubs a 2-0 advantage.
Joe Mather plated the Cubs' third run in the seventh, coming home on an RBI single by Soriano, who was tagged out trying to stretch the hit into a double.
Dave Sappelt, who finished 3-for-3 with a walk and a double, scored in the eighth on Anthony Recker's double. Sappelt went 6-for-10 with four doubles and three RBIs in the series.
Sveum wouldn't guarantee he'd get Sappelt into the lineup a lot with Brett Jackson set to return Friday, but Sappelt's efforts in Houston could help him find a few more pinch-hitting opportunities going forward.
"The bat has always been something that's appealing," Sveum said.
Soriano doubled in the ninth, making way for pinch-runner Tony Campana. The speedy outfielder took off toward third, drawing a high throw from catcher Chris Snyder. Campana scored on the error.
This was the final series between the Cubs and Astros in Houston as National League opponents. The Astros will be moving to the American League West in 2013. The teams aren't finished playing yet, though -- the Astros will head to Wrigley Field for the final series of the season in October.