Signaler

Extraire variable page html [Résolu]

Posez votre question perlzero - Dernière réponse le 18 avril 2017 à 09:25 par [Dal]
Bonjour,

j'ai besoin d'aide sur un script qui permet d'aller interroger une page html avec ceci :
$listuser=`curl -s -b cookie.txt $url`;


dans cette page html est écrit en dur une variable au format json :
var utilisateurs = {...[{...},{...}]}


<table id="table" class="tablestyle">
    <script type="text/javascript">

// <!--
var utilisateurs = {...[{...},{...}]}
...


Y'a-t'il un moyen d'extraire cette variable et de la passer à perl ?


Merci pour votre aide

Afficher la suite 
Utile
+0
plus moins
Oui, tu récupères les données JSON en les matchant avec une regexp, et tu utilises un module CPAN pour les décoder et les passer à Perl. Par exemple comme ceci avec JSON::Parse :

#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

use JSON::Parse 'parse_json';

my $listuser = <<'EOT';
<table id="table" class="tablestyle">
    <script type="text/javascript">

// <!--
var utilisateurs = { "firstName": "John", "lastName": "Smith", "age": 25, "address": { "streetAddress": "21 2nd Street", "city": "New York", "state": "NY", "postalCode": "10021" }, "phoneNumber": [ { "type": "home", "number": "212 555-1234" }, { "type": "fax", "number": "646 555-4567" } ] }
...
EOT                                                                                                                                         

if ($listuser =~ /var utilisateurs = (.*?)$/ms) {
    print "matched $1\n";
    my $parsed = parse_json($1);
    print Dumper($parsed);
}

donne :

$ ./perlzero.pl 
matched { "firstName": "John", "lastName": "Smith", "age": 25, "address": { "streetAddress": "21 2nd Street", "city": "New York", "state": "NY", "postalCode": "10021" }, "phoneNumber": [ { "type": "home", "number": "212 555-1234" }, { "type": "fax", "number": "646 555-4567" } ] }
$VAR1 = {
'age' => 25,
'address' => {
'postalCode' => '10021',
'state' => 'NY',
'city' => 'New York',
'streetAddress' => '21 2nd Street'
},
'firstName' => 'John',
'lastName' => 'Smith',
'phoneNumber' => [
{
'number' => '212 555-1234',
'type' => 'home'
},
{
'type' => 'fax',
'number' => '646 555-4567'
}
]
};

La regexp suppose que le JSON est sur une seule ligne à la suite de "var utilisateurs = "

Pour plus de détails : http://search.cpan.org/~bkb/JSON-Parse-0.49/lib/JSON/Parse.pod


Dal
Donnez votre avis
Utile
+0
plus moins
Merci Dal,

mon problème est résolu en grande partie avec l'aide que tu as fournie. Effectivement mon json était multiligne, mais avec quelques recherches supplémentaires, j'ai pu m'en sortir.

@bientôt
[Dal] 4358Messages postés mercredi 15 septembre 2004Date d'inscription ContributeurStatut 7 août 2017 Dernière intervention - 18 avril 2017 à 09:25
super, bravo !
Répondre
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !