Comment aspirer un site en PHP ?

Réponses rédigées par Antoine
Dernière mise à jour : 2018-08-27 15:52:10
Thèmes : php - script - curl - webmaster
Question

Comment faire pour aspirer tout le code HTML d'un site Web en PHP ?

Réponse

Il existe plusieurs manières de récupérer le contenu d'une page web (tout le code HTML) et ainsi de le stocker par exemple dans une variable pour ensuite en extraire la portion qui nous intéresse.

Pour effectuer un scrap d'une page web, c'est à dire aspirer de manière automatique son contenu et son code HTML, vous pouvez utiliser CURL de la manière suivante :

$url = "http://www.google.fr";
$options = array(
//CURLOPT_PROXY => "127.0.0.1:8080",
//CURLOPT_PROXYUSERPWD => "user:password",
//CURLOPT_PROXYTYPE => CURLPROXY_SOCKS5,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER         => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_ENCODING       => "",
CURLOPT_USERAGENT      => "spider",
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_AUTOREFERER    => true,
CURLOPT_CONNECTTIMEOUT => 120,
CURLOPT_TIMEOUT        => 120,
CURLOPT_MAXREDIRS      => 10,
);
$ch = curl_init($url);
curl_setopt_array($ch, $options);
$scrap = curl_exec($ch);
curl_close($ch);
echo $scrap;

On peut également utiliser une fonction PHP native : file_get_contents()

Remarque : Cette fonction quand elle est utilisée tel quel, n'intègre pas les entêtes HTTP, il est donc préférable de créer un contexte de flux pour y intégrer l'entête adéquate. Pour ce faire on utilise la fonction stream_context_create()

Voici comment procéder pour aspirer un site avec PHP :

$options = array(
  'http'=>array(
    'method'=>"GET",
    'header'=>"Accept-language: en\r\n" .
              "Cookie: foo=bar\r\n"
  )
);
$context = stream_context_create($options);
$file = file_get_contents('http://www.google.fr/', false, $context);
echo $file;

Les deux solutions fonctionnent, cependant CURL offre d'avantage d'options.