2012-08-22 2 views
0

J'essaie de récupérer des commentaires d'un site de nouvelles populaires pour une étude académique utilisant curl. Cela fonctionne bien pour les articles avec < 300 commentaires, mais après cela, il se débat.Utilisation de curl pour gratter de grandes pages

$handle = curl_init($url); 
curl_setopt($handle, CURLOPT_RETURNTRANSFER, true); 
$html = curl_exec($handle); 
curl_close($handle); 
echo $html; //just to see what's been scraped 

À l'heure actuelle cette page fonctionne très bien: http://www.guardian.co.uk/commentisfree/2012/aug/22/letter-from-india-women-drink?commentpage=all#start-of-comments

Mais celui-ci ne retourne que 36 commentaires malgré qu'il y ait plus de 700 au total: http://www.guardian.co.uk/commentisfree/2012/aug/21/everyones-talking-about-rape?commentpage=all#start-of-comments

Pourquoi est-il du mal pour les articles avec une tonne de commentaires?

+1

Vous devriez vérifier [Scrapy] (http://scrapy.org/) ... –

+0

Il est utilisé pagination. Vous devez connaître le nombre de pages et utiliser le cycle pour obtenir des commentaires de chaque page. –

Répondre

2

Votre page de commentaires est pageinated. Chaque page contient des commentaires différents. Vous devrez demander tous les liens de pagination des commentaires.

Le paramètre page=x est ajouté à l'URL pour une page différente.

Il peut être bon d'obtenir une page de base, puis de rechercher tous les liens avec le paarètre de page et d'en demander chacun à tour de rôle.

Comme Mike Christensen a fait remarquer si vous pouvez utiliser python et Scrapy cette fonctionnalité est intégrée. Il vous suffit de préciser l'élément le commentaire est situé et python ramperont tous les liens sur la page pour vous :)

+2

BTW, si vous avez peur de réécrire votre projet ou si vous ne voulez pas apprendre de nouvelles choses ... Scrapy est opérationnel et ramasse quelques données sur un site de grand magasin dans environ 20 minutes, et je n'ai jamais écrit un ligne de Python dans ma vie! –

+0

Merci pour toutes les réponses. J'ai surmonté le problème de pagination en ajoutant "? Commentpage = all" à l'url exécutant la boucle. Cela fonctionne bien pour les pages contenant jusqu'à 350 commentaires, mais après cela, la pagination se déclenche à nouveau et ne fait que gratter les 50 derniers commentaires. On a presque l'impression que la requête curl n'est pas complètement exécutée ou qu'elle est expirée. J'ai essayé d'étendre le CURLOPT_TIMEOUT à 60 secondes pour lui donner assez de temps pour terminer la tâche mais cela n'a pas semblé aider. Je vais certainement vérifier Scrapy mais je n'ai jamais utilisé Python et ma date limite est très proche. Merci encore! – charlieperry

Questions connexes