Créer une boucle de capture de liens

crazycricriangel -  
 Utilisateur anonyme -
Bonjour,

Je suis nouvelle sur le forum et je débute en programmation.

Je dois créer un programme via PERL et Mysql qui permet d'aspirer les données d'un site et les stocker dans ma base de donnée Mysql.

De ce fait, j'aimerais créer une boucle qui me permettrai de capturer les liens dont j'ai besoin.
les liens que je désire aspirer sont de type:

http://members.calbar.ca.gov/fal/Licensee/Detail/179600

J'aimerai capturer tout les liens du 30237 au 25610 en sachant que l'adresse ne bouge pas, seul le numéro change.

ça fait 3 jours que je bloque ,s'il vous plait aidez moi :)

merci beaucoup
Configuration: Windows Vista
Firefox 2.0.0.14

4 réponses

  1. bob
     
    1.Tu boucles sur ton intervalle de liens
    2.Appel de la fonction wget (http://support.evecommunity.com/eve/forums/a/tpc/f/9923013313/m/4743053313)
    3.Insertion de chaque résultat dans la BDD (http://support.evecommunity.com/eve/forums/a/tpc/f/9923013313/m/4743053313)
    0
    1. bob
       
      Je remets les liens, ils sont mal passés :

      http://support.evecommunity.com/eve/forums/a/tpc/f/9923013313/m/4743053313

      http://www.graphiks.net/cours/perl/54-connexion-mysql-en-perl.html
      0
    2. crazycricriangel > bob
       
      Merci pour ta réponse rapide!

      Mais je débute vraiment en programmation, je m'y suis mise il y a 1 semaine.
      et je ne vois pas du tout comment je peux boucler sur mon lien.

      Merci
      0
    3. crazycricriangel > bob
       
      Désolé de te poser des question de débutant :)

      Mais j'ai essayé des centaines de boucles du types

      $doc=~ 'http://members.calbar.ca.gov/search/member_detail.aspx?x=';

      for( $_=30237; $_<256311; $_++) {
      $url= $doc,$_++;
      }

      wget-> $url

      ou avec while et foreach... mais je n'arrive pas du tout à mes fins.

      c'est la frustation...lool

      pourrais-tu me mettre sur la voie stp?

      merci beaucoup

      (et encore désolépour ces questions de débutant)
      0
  2. crazycricriangel
     
    mon code ressemble à ça...
    mais ca ne marche qu'une seule fois...alors que j'aimerai quela boucle tourne.

    merci pour ta reponse rapide ;) (encore une fois)

    #!/usr/bin/perl -w
    use LWP::UserAgent;
    use DBI;
    use CGI;

    for( $a= 256320; $a> 256300; $a--) {

    my ( $statut, $name, $bar_number, $address, $phone_number, $fax_number, $email, $undergraduate_school, $county);

    $url= "http://members.calbar.ca.gov/fal/LicenseeSearch/QuickSearch?ResultType=0&SearchType=0&SoundsLike=False$a";

    my $browser = LWP::UserAgent->new();
    $browser->agent("Safari Browser");

    $webdoc = $browser->request(HTTP::Request->new(GET => $url));
    if($webdoc->is_success){
    $content = $webdoc->content();
    }
    #print $content;
    @document = split(/\n/,$content);

    foreach $content (@document) {
    next if ($content =~ /deceased/i );
    next if ($content =~ /not found/i );
    }

    $count = @document;

    for($a=0; $a <$count;$a++) {
    $statut = $document[$a+1],if($document[$a]=~ /Current Status:/);
    $name = $document[$a],if($document[$a]=~/State Bar of CA ::/);
    $bar_number = $document[$a+1],if($document[$a]=~/Bar Number/);
    $address = $document[$a+1],if($document[$a]=~/Address/);
    $phone_number = $document[$a+1],if($document[$a]=~/Phone Number/);
    $fax_number = $document[$a+1],if($document[$a]=~/Fax Number/);
    $email = $document[$a+1], if($document[$a]=~ /e-mail/);
    $undergraduate_school= $document[$a+1],if($document[$a]=~ /Undergraduate School/);
    $county= $document[$a+1],if($document[$a]=~ /County/);
    }

    $name =~s/State Bar of CA ::/\ /i;
    $bar_number =~s/<td colspan="3" class="value">/\ /i;
    $bar_number =~s/<\/td>/\ /i;
    $address =~s/<td class="value" rowspan="3">/\ /i;
    $address =~s/<br \/>/\n/gi;
    $address =~s/<\/td>/\ /i;
    $phone_number =~s/<td class="value">/\ /i;
    $phone_number =~s/<\/td>/\ /i;
    $fax_number =~s/<td class="value">/\ /i;
    $fax_number =~s/<\/td>/\ /i;
    $email=~s/<td class="value">/\ /i;
    $email=~s/<\/td>/\ /i;
    $email=~s/ /\ /i;
    $undergraduate_school =~s/<td class="value">/\ /i;
    $undergraduate_school =~s/<\/td>/\ /i;
    $county=~s/<td class="value">/\ /i;
    $county=~s/<\/td>/\ /i;

    #print"\nCurrent Statut:", $statut;
    #print "\nName:",$name;
    #print "\nBar Number:", $bar_number;
    #print "\nAddress:", $address ;
    #print "\nPhone Number:", $phone_number;
    #print "\nFax Number:", $fax_number;
    #print "\nEmail:", $email;
    #print "\nUndergraduate School:", $undergraduate_school;
    #print "\nCounty:", $county;

    my $db = DBI -> connect (("dbi:mysql:dbname=calbar;host=localhost;","root","")) or die "connection impossible!";

    $db-> do("insert into attorney values('', '$statut', '$name', '$bar_number', '$address', '$phone_number', '$fax_number', '$email', '$undergraduate_school', '$county')");

    $db -> disconnect();
    }
    0
    1. Utilisateur anonyme
       
      Pourquoi tu fais une boucle dégressive ? Essaie avec une version progressive ou un while si ça marche pas.
      https://www.commentcamarche.net/contents/776-perl-les-structures-conditionnelles
      0
  3. crazycricriangel
     
    j'utilise une boucle regressive car je dois recuperer environ 150 000 lignes sur ma base de donnée et que je veux recuperer en priorité les plus recents ( dans le code test j'essaie juste d'en recupere 20 pour voir si le code marche) .

    Sinon tu sais pourquoi ma boucle ne marche q'une seule fois?

    merci :)
    0
    1. Utilisateur anonyme
       
      Aucune idée, mais t'as essayé avec les autres méthodes ?
      0
  4. crazycricriangel
     
    heu... y'a d'autre moyens?

    c'est à dire que c'est déjà un miracle que ça marche plus ou moins...
    je me demande si je dois faire appel à des fonctions subroutines, ( je sais pas comment ça marche malgré que j'ai passé la journée à lire des tutoriaux dessus...)loool
    0
    1. Utilisateur anonyme
       
      heu... y'a d'autre moyens?

      Ben ce que j'ai cité y'a deux posts de ça...
      0