Spain reached the World Cup semi-final after a hard-fought victory over Paraguay in Johannesburg on Saturday evening.

A game of two missed penalties and a solitary effort from the sharp-shooting David Villa brought life to an otherwise drab contest.

Andres Iniesta and Xavi failed to make an impact in the opening exchanges as their Paraguay counterparts kept them quiet and Cristian Riveros was the first to go close as he headed over a teasing centre.

Soon after, Antolin Alcaraz was inches away from getting his head on Claudio Morel's cross.

Fernando Torres' poor World Cup continued as he was replaced by Cesc Fabregas soon after the interval and just minutes later, Gerard Pique hauled down Oscar Cardozo in the penalty area.

The striker picked himself up, but smashed his penalty too close to Casillas and he held on to spare his side's blushes.

Then minutes later, at the other end, Spain won a penalty of their own. Villa got the better of Alcaraz, who bundled him over and he was fortunate to escape with a caution from referee Carlos Batres.

Following Villa's miss from 12-yards against Honduras in the group stage, Xabi Alonso was handed the responsibilities and he slotted the initial effort home.

The referee ordered a re-take and this time custodian Justo Villar kept Alonso's effort out. Fabregas was then felled as he tried to slam home the rebound and Sergio Ramos watched his strike cleared off the line.

With just seven minutes remaining, the European Championship holders got the lead they craved.

Iniesta skipped past two challenges before finding substitute Pedro and his shot struck a post. Villa was on-hand to coolly slot home his fifth goal of the compettion via both posts and move out in front in the race to land the Golden Boot award.

Paraguay had a golden opportunity to grab an equaliser as Lucas Barrios' fizzing low drive was parried by Casillas and Roque Santa Cruz hammered straight at the sensational stopper.

With time running out, Spain looked the more likely to grab a second, but Villa's strike proved to be the difference and they will face Germany in the semi-final on Wednesday for the chance to meet Uruguay or Holland in the final on July 11.