2013-10-08 1 views
2

Je fais du scrap web avec curl pour une page de profil linkedin. Si nous essayons d'extraire des données de cette URL (http://in.linkedin.com/in/ratneshdwivedi) qui est publique, cela fonctionne. Lorsque je suis connecté à linkedin et que j'essaie de collecter des données à partir de cette URL (http://www.linkedin.com/profile/view?id=77597832&locale=en_US&trk=tyah2&trkInfo=tas%3Aravi%20kant%20mishra%2Cidx%3A1-1-1), cela ne fonctionne pas et renvoie à la place des données vierges.Web scraping en PHP - travailler avec certaines URL mais échoue avec d'autres

Ce qui suit est mon code source:

$html= $this->_getScrapingData ('http://in.linkedin.com/in/ratneshdwivedi',10); 
preg_match("/<span class=\"full-name\">(.*)<\/span>/i", $html, $match); 

private function _getScrapingData($url,$timeout) { 
     $ch = curl_init($url); // initialize curl with given url 
     curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER["HTTP_USER_AGENT"]); // set useragent 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // write the response to a variable 
     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // follow redirects if any 
     curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); // max. seconds to execute 
     curl_setopt($ch, CURLOPT_FAILONERROR, 1); // stop when it encounters an error 
     return @curl_exec($ch); 

    } 

Merci à l'avance

Répondre

1

est votre script authentifie?

La page que vous avez liée ne peut être consultée qu'une fois connecté, cela expliquerait pourquoi votre script renvoie des données vides car la classe d'extension de nom complet n'existe pas sur la page de connexion redirigée.

Vous pouvez également vérifier http://developer.linkedin.com/documents/profile-api car il existe des moyens beaucoup plus agréable d'accomplir cela que de gratter les pages.

1

Je pense que le problème est que vous êtes connecté dans votre navigateur (je suppose que votre navigateur a un cookie avec un ID de session) mais lorsque vous appelez curl il ne sait rien de vos cookies.

La solution serait d'appeler d'abord demande de connexion avec vos informations d'identification et enregistrer les cookies reçus de linkedin. Ensuite, appelez toutes les demandes que vous voulez avec des cookies appropriés. Juste google comment envoyer des cookies via PHP curl, je suis sûr que quelqu'un a demandé cela avant. Btw., Je pense que LinkedIn a une API que vous pouvez utiliser à la place.

2

Votre script n'utilise pas les mêmes cookies que votre navigateur. Vous devez d'abord parcourir le formulaire de connexion avec votre script.

Utilisez

CURLOPT_COOKIEJAR 
CURLOPT_COOKIEFILE 

pour garder les cookies dans vos demandes.