Vous n'êtes pas identifié(e).

  • Contributions :
  • Vos boîtes de messages privés sont vides.

#1 2016-05-29 17:57:34

Mention Cildrim
Scout
Inscription : 2016-05-08
Messages : 27

Scraper de dictionnaires en ligne

Bon du coup je fais suite à mon générateur de spin, étant donné qu'il fait des spin assez sales, la première solution est de lui proposer un dictionnaire le plus propre possible.
Donc voici un code pour faire le dictionnaire en question.
Le fonctionnement : dans un dossier on lui fournit :

- les proxy dans "proxycheck.txt" sous la forme
IP:PORT
IP:PORT
...

- le "dico.txt" c'est une liste qui comprend la quasi totalité de la langue française, on peut trouver des listes facilement sur le net, le mien fait 300K mot, je pense que c'est bien trop et qu'on pourrait se contenter de moins du genre une liste qui reprend les mots FR les plus utilisés
sous la forme
mot1
mot2
...

- le script va interroger l'url distante derriere un proxy, puis scraper le résultat selon le regex fourni. Le résultat sera un dico sous la forme
mot1
synonyme1|syn2|syn3
mot2
synonyme1|syn2|syn3
...

Je suis en train de le faire tourner sur ma base de 300K mots, je verrai si le résultat est assez qualitatif pour être utilisé.
Je ne donne pas le site sur lequel je scrap car je pense que la propriété de ce genre de dico n'est pas libre.

<?php
$listemot = file("dico.txt");
$listeproxy = file("proxycheck.txt");
$nbproxy = count($listeproxy);
$nbmot = count($listemot);
$i = 1;

echo "# Scrap en cours...\n";

  foreach($listemot as $mot)
  {  
    $mot = trim($mot);
   
    $proxy = trim($listeproxy[rand(0,$nbproxy)]);
   
    echo "Requete $i / $nbmot : $mot - Proxy : $proxy\n";
 
    $url = "ICI L URL DE VOTRE SPOT/$mot";  
    $site = curl_init($url);     
    curl_setopt($site, CURLOPT_SSL_VERIFYPEER, false);     
    curl_setopt($site, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($site, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36');
    curl_setopt($site, CURLOPT_HTTPPROXYTUNNEL, true);
    curl_setopt($site, CURLOPT_PROXY, $proxy);
    $contenu = curl_exec($site);
    curl_close($site);         
   
// la regex qu'il faudra adapter selon votre site source
    preg_match_all('/<a class="word" href=".*?" title=".*?">(.*?)<\/a>/si',$contenu,$listesynonyme); 
   
    $nb = count($listesynonyme[1]);

    if(empty($listesynonyme[1]) ||  $nb > 80)
    {
      echo "Pas de syn pour $mot ou trop de syn : $nb\n";
    }
    else
    {    
      echo "Synonymes enregistres : $nb\n";
      $filesave = fopen("filesave.txt","a");   
      $synonyme = implode("|",$listesynonyme[1]);
      fputs($filesave,"$mot\r\n");
      fputs($filesave,"$synonyme\r\n");
      fclose($filesave);     
    }
  $i++;
   
  }

?>
 

J'ai mis un max pour le nombre de synonyme car souvent s'il y en a trop c'est qu'ils ne sont pas pertinents.
Il faut adapter le regex à votre source.


-----------------------------------
www.erminea.fr - WebCréation, Référencement, Rédaction

Hors ligne

Pied de page des forums