George Springer turned a night of frustration into a ninth-inning celebration.

Springer hit a tiebreaking, three-run homer in the ninth inning, Gerrit Cole win his 13th straight decision and the Houston Astros beat the Kansas City Royals 4-1 Friday night to stop a three-game losing streak. The Astros maintained a 7 1/2-game lead over Oakland in the American League West.

Kyle Tucker singled with one out in the ninth off Heath Fillmyer (0-2) and pinch-hitter Michael Brantley walked. Josh Reddick struck out and Springer followed with his 35th homer. Springer was 0-for-4 and had struck out in his three previous at-bats.

"George Springer is one swing away from having a great day every day," manager A J. Hinch said. "He hangs in there as well as anyone. He did have a tough night leading up to that point."

Springer also made a stellar catch on Alex Gordon's long drive to right in the fourth inning while the Royals' Hunter Dozier raced from first base all the way to third. Springer tossed the ball in and Dozier was easily doubled up at first.

"I got a good jump on it and it was getting close to the wall and I figured I might as well jump for it and was able to snowcone it," Springer said.

Cole (17-5) struck out 11 in eight innings, reaching double figures for the sixth straight start, and allowed an unearned run and four hits. He is 13-0 in 19 starts since losing to the Chicago White Sox on May 22, the longest streak of consecutive winning decisions in one season since Stephen Strasburg for Washington in 2013.

"Gerrit was exceptionally nasty," Hinch said.

Cole called Springer the player of the game.

"I think it tells you a lot about a player when he's struggling at the plate and he's obviously frustrated with himself but he doesn't take it out on his defense. And, lo and behold, the biggest swing of the night comes from him in the ninth inning."

Roberto Osuna worked around a two-out single for his 33rd save in 39 chances.

Jose Altuve hit his 28th home run in the first inning, breaking the Astros record for home runs by a second baseman, set by Jeff Kent in 2004. It was Altuve's 10th hit in 23 career at-bats (.435) against Danny Duffy but his first homer.

Duffy allowed one run and four hits in six innings, throwing 54 of his 108 pitches in the first two innings.

Meibrys Viloria hit a sacrifice fly in the eighth after Bubba Starling singled, stole second and took third on catcher Martin Maldonado's throwing error.

Gordon leaped near the left-field wall to grab Kyle's Tucker's drive in the second inning, then made a diving catch of Tucker's liner to the gap in the seventh.

"Gordo sold out for that ball," Duffy said. "It's what he does. I think he's probably up there in triple digits in terms of catches made like that for me in my career."

Royals manager Ned Yost and Gordon, who was just called out on strikes, were ejected by plate umpire Lance Barrett after the seventh inning. It was the 47th of Yost's career but only the second for Gordon.

"I said something in the dugout when the inning was over," Gordon said. "It wasn't much, I didn't cuss at him. Just said one thing and then he threw me out. I didn't think I should've been thrown out, but I probably shouldn't have said what I said."

Up next

Astros RHP Zack Greinke (15-5, 2.99 ERA) returns to his old home Saturday, matched with Royals LHP Mike Montgomery (3-8, 4.77 ERA). Since leaving the Royals after the 2010 season, Greinke started at Kauffman four times for four other teams. He had no decisions in 2012 with the Brewers and then the Angels, and losses in 2014 with the Dodgers and 2017 with the Diamondbacks. Greinke was 36-28 at Kauffman during seven seasons with Kansas City. Greinke is 5-1 with a 3.22 ERA in seven starts for the Astros after being obtained from the D-backs.