Webb (18-4) allowed four hits and retired 16 Astros on groundouts to win his seventh straight decision and fifth straight start against Houston.
Snyder and Chris Young, both Houston natives, and former Astro Chris Burke homered for the Diamondbacks, who've won four of five. Snyder and Burke homered for the second straight game and Snyder and Young also had RBI singles.
Ty Wigginton homered and Lance Berkman had an RBI double for the Astros, who also had their seven-game home winning streak halted.
Wandy Rodriguez (7-5) gave up four runs and matched a career high with six walks in 2 1-3 shaky innings. The left-hander had won four of his previous five decisions.
Stephen Drew doubled into the left-field corner on Rodriguez's third pitch to stretch his career-high hitting streak to 17 games. Drew advanced to third on Young's flyout before Rodriguez walked Conor Jackson and Adam Dunn to load the bases.
Rodriguez missed outside with a 3-2 pitch to Mark Reynolds and Tony Clark added another run with a single to left. After Rodriguez walked Snyder to make it 3-0, Chris Sampson started throwing in the Astros' bullpen.
Rodriguez struck out Burke and Webb to escape more damage.
Wigginton singled in the Houston first to extend his career-best hitting streak to 12 games. One out later, Berkman doubled to right-center, his 11th RBI in his last seven games. Berkman's 943rd career RBI moved him past Jose Cruz and into third place on the Astros' all-time list.
Rodriguez struck out two batters in the second, then walked two in the third to create more trouble. Snyder drove in a run with a single to right before Sampson relieved. Sampson got two outs to end the inning.
Drew led off the fourth with a double and scored on Jackson's single and Young drove in another run with a single in the fifth for a 6-1 Arizona lead.
Webb, meanwhile, retired 13 of the next 15 batters he faced after Berkman's RBI double. He walked David Newhan leading off the Houston fifth, but got Humberto Quintero to ground into a double play, then fanned Reggie Abercrombie for his sixth strikeout.