The world number five lost the first set on a tie-break to the serve-volleying Lopez but started to take control in the second.
Regularly targeting Lopez's weaker backhand, Ferrer wore down his opponent breaking once to claim the second 6-3.
The third set began on serve until Lopez made a mess of his service in the seventh game, double-faulting the first two points as Ferrer made the crucial break.
The 29-year-old served out the match with ease to advance to the Shanghai final for the first time.
He will now face the winner of Saturday's second semi-final between Andy Murray and Kei Nishikori.