Página 1 de 1

Búsqueda de cadena en $mech->content()

NotaPublicado: 2012-02-24 18:33 @814
por TooRDJ
¡Saludos!

Tengo un pequeño código, en el cual hago una consulta a una web, y quiero obtener los ID que identifican cada uno de los artículos de dicha web.

El formato de ID para cada articulo es el siguiente:
Sintáxis: [ Descargar ] [ Ocultar ]
Using html4strict Syntax Highlighting
  1. <li class="view-item" id="ITEM22483">
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Todos los IDs tienen el mismo formato y solo hay un por articulo, solo cambia el "ITEM22483".

Tengo la siguiente parte del código:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $mech = WWW::Mechanize->new();
  2. $mech->get($url);
  3. my $output_page = $mech->content();
  4.  
  5. if ($output_page =~/<li class=\"view-item\" id=\"(.*?)\">/) {
  6. print "ID: $1\n";
  7. }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Este código funciona, me muestra el ID:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
ID: ITEM22483
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

El problema es que solo me muestra el primer ID que encuentra y hasta ahí llega. No me muestra los demás.

¿Qué me falta para que muestre los demás, y no se detenga en el primero que encuentra?

¡Gracias!

Re: Búsqueda de cadena en $mech->content()

NotaPublicado: 2012-02-24 18:56 @830
por explorer
Hay que hacer una búsqueda mientras sigamos encontrando patrones:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. while ($output_page =~ /<li class="view-item" id="(.*?)">/g) {
  2.     print "ID: $1\n";
  3. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
El tema es usar una expresión regular con la opción /g. Dentro de un while(), nos va buscando todas las coincidencias.

Más información en perldoc perlre.

Re: Búsqueda de cadena en $mech->content()

NotaPublicado: 2012-02-24 19:02 @834
por TooRDJ
Perfecto. ¡Muchas gracias, explorer! :mrgreen: