Scraper en php

Bonjour à tous,

Je dois faire de l’extraction de textes de pages web (h1, hx, content, meta_tags) et j’ai essayé plusieurs outils qui proposent le service via une API, mais soit c’est trop cher soit ça fait pas ce que je veux.

Avez vous des solutions pour scraper qui pourraient se faire via du php par exemple ?

Merci à vous !
Nicolas

Bonsoir Nicolas,

Quelle est ta volumétrie de pages à traiter?

Souhaites tu l’extraction de textes après loading du DOM et modification par d’éventuelles requêtes AJAX. scripts JS ?

Hello,

volumétrie faible dans un premier temps je dirais quelques centaines de pages/jour. En fait j’utilise (en mode amateur) actuellement file_get_html($url)->plaintext mais ça me renvoi le texte en vrac c’est super moche. Je ne comprends pas bien ta seconde question mais du JS permettant de modifier à l’affichage ce serait pas mal…

Merci pour ton retour
Nicolas

Essaies screamingfrog sur mac (ou xenu sur pc), cest fait pour scraper des éléments standards types hn, meta, etc.

Merci Cebri mais ce que je cherche est accessible en web, que je l’appelle sur mon serveur ou en mode Saas il sera appelé par une page web, je ne peux pas avoir de logiciel lourd

Ah ok. Desole…

Je pense qu’une recherche « scraper » filtrée sur le language PHP sur GitHub te proposera une réponse en 2/2. pour ça en ruby j’utilise la gem anémone.

Prends un site comme: http://www.carrefour.fr, fais une requête basique sur ce site, de type CURL ou WGET, ou tout autre équivalent en PHP ou Python / Ruby / etc. Tu te rendras compte que le résultat HTML brut renvoyé n’est pas celui que tu verras affiché dans ton navigateur internet.

De plus en plus de sites sont en mesure de savoir si c’est un robot, ou un navigateur qui requête leurs serveurs, et agissent en conséquent (le site de Carrefour affiche même un message de type: ne pas passer par un robot).

Mais au de là de cet aspect sécuritaire, la plupart des sites web font un usage intensif de Javascripts et de requêtes AJAX afin que le contenu de leur site web soit dynamique (contenu HTML non chargé au chargement initial de la page, mais contenu HTML chargé et transformé à la volée par la suite).

Pour résumer, ce qu’il s’affiche et ce que tu vois sur le site, n’est pas forcément la même chose que le code source HTML retourné par tes requêtes de type curl / wget, file_get_html(), etc.

Du coup cela peut impacter les résultats obtenus lorsque tu cherches à:

  • compter et récupérer les divers balises h1, h2, …, hN,
  • compter et récupérer les images, leurs balises alt, title
  • compter le nombre de mots contenu dans le texte du corps de la page
  • compter et récupérer les liens internes au site
  • compter et récupérer les liens externes au site

C’est pour ce besoin précis que je suggère de passer par un script se comportant comme un navigateur.

J’ai une démo accessible via API / web server, si cela t’intéresse.

1 J'aime

ok c’est plus clair. Tu as raison en effet j’imagine que cela doit se produire sur des sites. Si tu as une démo à dispo je suis preneur
Merci

@nicolas_44 : ça marche, MP pour une clé API de démo :slight_smile:

1 J'aime