MILWAUKEE -- Matt Bonner said it was his turn to be the spark off the bench.

Bonner scored all of his 17 points in the second half, Manu Ginobili was consistent again with 23 and the San Antonio Spurs beat the Milwaukee Bucks 91-84 on Wednesday night for their fourth straight win.

"We have guys do that every night. Everybody on the team has contributed at some point in the season," said Bonner, who had his right knee closely checked after the game but said the injury wasn't serious. "We needed a shot in the arm in the second half offensively and I was able to come in and make some shots."

The Spurs improved the NBA's best record to 33-6 despite a pace more fitting to the grinding Bucks, who came in as the worst shooting and lowest-scoring team in the league.

With the Spurs trailing by two, Bonner sparked an 11-2 run, hitting two 3-pointers and a floater that gave San Antonio a 79-72 lead with 8:32 left. When Milwaukee cut it to three late, Bonner answered with a 15-footer off a quick drive with 57 seconds to play that halted the Bucks' rally -- even if his eyes may have been shut.

"I have no doubt they were closed. He had no clue," Spurs coach Gregg Popovich joked. "Along with his shot, he's learned to drive it and that's made him a pretty dangerous guy."

John Salmons scored 17 and Andrew Bogut had 15 points and 14 rebounds for the Bucks, losers of four of their last five.

After the Spurs' spurt gave them a seven-point lead, both teams went cold over a nearly 4-minute span before a basket by Tim Duncan. Ersan Ilyasova, who finished with 11 points and 10 rebounds, converted a three-point play for the Bucks and Salmons hit a jumper and a 3-pointer that cut San Antonio's lead to 81-80 with 3:11 to go.

But Ginobili hit a floating 6-footer, Ilyasova threw the ball away and Tony Parker found Duncan all alone under the basket for a slam that gave San Antonio an 85-80 lead.

Salmons hit two free throws, but Bonner answered with his final points to seal the victory.

"Nothing against Matt, we're Matt Bonner fans, but we know he's going to pump fake and go right. He pump-faked and went right over, and over, and over again," Bucks coach Scott Skiles said. "He made us pay."

Since Ginobili was reinserted into the starting lineup late last season, he's scored 10 points or more in 54 of his last 59 games. But it's been the contributions of players outside of the Spurs' nucleus that's sparked their early season run.

"A lot of different guys are playing very well on different nights. It's turned into the record that we have now," Duncan said. "We're not counting on one individual to try to get it done every night."

San Antonio, which won Tuesday night in Minnesota, spent most of the game trailing and looking tired before taking its first lead in more than 25 minutes at 59-57 when Bonner was left alone for a 3 late in the third.

An incredible effort by 5-foot-5 Earl Boykins helped Milwaukee regain a small advantage heading into the fourth.

With 1:58 left in the third and 4 seconds on the shot clock, the 6-foot-11 Duncan switched to guard Boykins, who picked up his dribble, pump faked and flipped an underhanded shot under Duncan's left arm from about 10 feet that fell to give Milwaukee a 64-61 lead.

"It wasn't over Tim, it was around Tim," Boykins said.

Said Duncan: "Obviously, his size doesn't matter. I guess it was the last option he had and somehow he made it. It was a heck of a play."

The Bucks (14-22) dropped another close game against another strong opponent nearing the season's midway point.

Milwaukee, which returned from Atlanta on Tuesday night after their game with the Hawks was postponed due to a winter storm, has now played all its games against five of the top six Western Conference teams.

Bogut had a double-double late in the first half, but the Spurs adjusted in the second and Bogut wasn't a factor the rest of the way.

"San Antonio, they're one of the few teams that no matter what, they don't have the peaks and valleys," Boykins said. "They just play consistent basketball for 48 minutes, and we didn't do that and it showed. They played a solid game."

Game notes

Drew Gooden returned for Milwaukee after missing 15 of the last 20 games with a left foot injury. He finished with eight points in 11 minutes. ... Twenty-six of the Bucks' 36 games this season have been against teams .500 or better, the most in the NBA. ... The Spurs have used the same starting lineup for every game this season.