IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Scraping, bloqué ?


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Août 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Août 2015
    Messages : 11
    Par défaut Scraping, bloqué ?
    Bonjour

    Je scrape le contenu d'un site "http://theexample.net/" il y'a une semaine maintenant, tout marchais à merveille. Mais aujourd'hui voulant faire la même tache je reçois une erreur.

    Je suis sure que mon script marche car quand je scrape du contenu de google ou d'un autre site çà marche.

    Voilà mon script

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <?php
    include('simple_html_dom.php');
     
     
    $html = @file_get_html('http://theexample.net/');  
    if($html==FALSE) {
      echo 'error';
    } else {
      echo 'success';
    }
     
     
    // Find all links
    foreach($html->find('title') as $element)
    echo $element->innertext. '<br>';
     
    ?>
    Je reçois error pour "http://theexample.net/" et success pour les autres site.

    Voilà l'erreur Fatal error: Call to a member function find() on a non-object in C

    et si j'enlève le @ je recois une errreur en plus :Warning: file_get_contents(....: failed to open stream: No such file or directory in...

    Que devrais-je faire ?

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu as contrôlé ce que valait $html et ce qui se passait dans file_get_html() ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Août 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Août 2015
    Messages : 11
    Par défaut
    oui quand je mets https://www.google.com/ à la place de http://theexample.net/ çà marche.

  4. #4
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    3 018
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 3 018
    Par défaut
    Il est possible que suite à tes essais successifs le développeur du site:
    • ait banni l'IP ou le domaine de ton serveur, via une directive dans un .htaccess par exemple (vu que tu pratiques du scraping sauvage sans avoir l'autorisation du propriétaire du site.)
    • contrôle désormais le User Agent (qui dans ton cas ne correspond pas à un quelconque navigateur), ce qui peut se faire dans le code PHP même via la variable $_SERVER['HTTP_USER_AGENT'].
    • interdit l'accès aux pages de son site via fopen, file_get_contents, DOMDocument::loadHTMLFile et fort probablement file_get_html (*) en réglant l'option allow_url_fopen à 0 dans son php.ini (ou un truc équivalent s'il utilise un autre langage).


    Tu peux passer outre un filtre d'IP ou de domaine en passant par un serveur proxy (ou un service quelconque proposant une ip dynamique).

    Pour ce qui est du contrôle du User Agent, il peut être modifier facilement soit en définissant un contexte de flux pour les fonctions fopen, file et file_get_contents, soit en utilisant cURL pour récupérer la page (ça demande un peu d'investissement mais c'est bien plus performant). cURL permet également de passer outre allow_url_fopen.

    (*) Au passage, je ne saurais trop te déconseiller d'utiliser simple_html_dom qui n'est pas réputé pour sa vitesse (et qui selon moi n'est pas si simple que ça) en matière de parsing html. Autant sauter le pas pour se plonger dans DOMDocument et DOMXPath (qui, une fois appris sont utilisables dans n'importe quel langage à peu de frais).

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    oui quand je mets https://www.google.com/ à la place de http://theexample.net/ çà marche.
    ça ne répond à aucune de mes questions.
    Le but c'est de disséquer ce qui se passe quand ça échoue.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre averti
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Août 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Août 2015
    Messages : 11
    Par défaut
    Citation Envoyé par CosmoKnacki Voir le message
    Il est possible que suite à tes essais successifs le développeur du site:
    • ait banni l'IP ou le domaine de ton serveur, via une directive dans un .htaccess par exemple (vu que tu pratiques du scraping sauvage sans avoir l'autorisation du propriétaire du site.)
    • contrôle désormais le User Agent (qui dans ton cas ne correspond pas à un quelconque navigateur), ce qui peut se faire dans le code PHP même via la variable $_SERVER['HTTP_USER_AGENT'].
    • interdit l'accès aux pages de son site via fopen, file_get_contents, DOMDocument::loadHTMLFile et fort probablement file_get_html (*) en réglant l'option allow_url_fopen à 0 dans son php.ini (ou un truc équivalent s'il utilise un autre langage).


    Tu peux passer outre un filtre d'IP ou de domaine en passant par un serveur proxy (ou un service quelconque proposant une ip dynamique).

    Pour ce qui est du contrôle du User Agent, il peut être modifier facilement soit en définissant un contexte de flux pour les fonctions fopen, file et file_get_contents, soit en utilisant cURL pour récupérer la page (ça demande un peu d'investissement mais c'est bien plus performant). cURL permet également de passer outre allow_url_fopen.

    (*) Au passage, je ne saurais trop te déconseiller d'utiliser simple_html_dom qui n'est pas réputé pour sa vitesse (et qui selon moi n'est pas si simple que ça) en matière de parsing html. Autant sauter le pas pour se plonger dans DOMDocument et DOMXPath (qui, une fois appris sont utilisables dans n'importe quel langage à peu de frais).


    Je suis sure que mon ip n'a pas été blacklisté: je développe le site en local, j'ai une ip dynamique, j'ai redemarré ma box mon ip a changé, j'ai meme installé hotspot shield mais toujours le même problème.

  7. #7
    Membre averti
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Août 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Août 2015
    Messages : 11
    Par défaut
    Donc si je passe par domdocument et xpath je pourrais régler le problème ?

  8. #8
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    3 018
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 3 018
    Par défaut
    Non, ça c'est juste un conseil pour le parsing du document. Dans un premier temps essai déjà de récupérer la page. (google: tutoriel php cURL me semble un bon point de départ.)

    Question bonus: As-tu vérifié que la page est toujours accessible via ton navigateur?

  9. #9
    Membre averti
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Août 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Août 2015
    Messages : 11
    Par défaut
    Citation Envoyé par CosmoKnacki Voir le message
    Non, ça c'est juste un conseil pour le parsing du document. Dans un premier temps essai déjà de récupérer la page. (google: tutoriel php cURL me semble un bon point de départ.)

    Question bonus: As-tu vérifié que la page est toujours accessible via ton navigateur?

    Oui j'ai verifié la page s'ouvre toujours dans mon navigateur.

    Donc je vais essayer de faire comme vous me dites m'investir dans Curl, Domdocument et xpath mais lequel choisir ?

Discussions similaires

  1. Requête SQL qui me bloque
    Par David Guillouet dans le forum Langage SQL
    Réponses: 5
    Dernier message: 27/04/2004, 14h52
  2. Bloque la date et l'heure sous Win XP ??
    Par Djedjeridoo dans le forum Windows
    Réponses: 2
    Dernier message: 05/04/2004, 12h11
  3. Réponses: 2
    Dernier message: 23/03/2004, 12h23
  4. Réponses: 1
    Dernier message: 23/02/2004, 12h58
  5. bloqué en mode Release
    Par matsch77 dans le forum MFC
    Réponses: 3
    Dernier message: 07/01/2004, 17h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo