A much-changed Barca side without the suspended Neymar plus the injured trio of Xavi Hernandez, Lionel Messi and goalkeeper Victor Valdes conceded twice in the opening quarter of an hour, Sergio Escudero breaking the deadlock and then Lisandro Lopez scoring a header.
But Pedro's stunning burst of scoring was followed by a volley and a penalty from Cesc Fabregas in the second half - with Pedro getting an assist and then winning the spot-kick to crown a brilliant individual performance.
Espanyol produced a dominant performance to swat aside Real Valladolid 4-2 at Cornella-El Prat.
Javier Aguirre's side looked far more determined than their opponents for the majority of the 90 minutes, suffocating them with high pressing which led to three of their four goals.
Sergio Garcia got the ball rolling by scoring a penalty after five minutes and Christian Stuani doubled the lead half an hour later. Victor Sanchez made sure of the points with a third goal on 67 minutes, and Stuani got his second and the fourth of the day shortly afterwards.
With the three points in the bag the hosts began to relax, and Javi Guerra and Victor Perez each pulled goals back late on for Valladolid, but there was never any doubt as to how the match would end.
Diego Costa slammed home a 77th-minute penalty to preserve all three points for Diego Simeone's side, who had gone behind with less than two minutes on the clock and then conceded a second-half equaliser shortly after taking the lead.
Andreas Ivanschitz stunned the Vicente Calderon with an early goal for the visitors, which was eventually cancelled out by a Diego Godin header.
Costa put the hosts ahead two minutes into the second half but Pedro Rios' solo effort on 57 minutes meant Los Rojiblancos required one more goal, which they finally got when Costa fired into the bottom corner from the spot.
Sevilla continued their excellent recent run of form by beating Villarreal 2-1 away from home to move up to seventh.
Juan Cala headed the visitors into the lead in the 24th minute from a set piece, and with 19 minutes remaining Carlos Bacca made sure of the points by taking advantage of a defensive error.
Villarreal had been far from their best but were awarded a penalty late on when Jaume Costa was fouled by Cala, and the defender was shown a straight card.
But Marcelino's side were unable to make the most of the six minutes in which they had an extra man and Sevilla held on for the win, recording their fourth victory in five games, and becoming only the second team this season to leave El Madrigal with the three points.
A goal in each half from Carlos Vela saw Real Sociedad move into fifth in the Primera Division table with a comfortable 3-1 victory over Granada at Los Carmenes.
The former Arsenal striker opened the scoring after 29 minutes before Francisco Piti equalised for the home side. Antoine Griezmann doubled Sociedad's score minutes ahead of half-time before Vela struck again midway through the second half.
Ramon Azeez's early goal was enough for Almeria to claim a much-needed 1-0 win over fellow strugglers Real Betis.
Azeez drilled a strike from 30 yards in only the third minute which beat the Betis defence in the only breakthrough of the game.
The result means Almeria climbed out of the bottom three and into 15th place while Betis remain rooted to the bottom of the overall standings.
On Friday night, Malaga recorded back-to-back Primera Division wins for the first time since February as Nacho Camacho's early goal helped see off 10-man Elche.
Camacho headed home what would prove to be the only goal of the game in the seventh minute as Malaga followed up last weekend's home win over Getafe with another 1-0 triumph.