• Publicidad

Expresiones regulares en página de torrent

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Expresiones regulares en página de torrent

Notapor BigBear » 2013-11-27 15:52 @703

Hola, estoy usando expresiones regulares para capturar cierto contenido en una página de torrents. La regex que estoy usando es esta:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. if($code=~/<a href="(.*?)" title="Download this torrent using magnet"><img src=(.*?)><font class="detDesc">(.*?)<\/font><\/td><td align="right">(.*?)<\/td><td align="right">(.*?)<\/td>/mig) {
  2. print $1;
  3. }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

El contenido de $code es este:
Sintáxis: [ Descargar ] [ Ocultar ]
Using html4strict Syntax Highlighting
  1. <a href="/torrent/9254599/Batman.Arkham.Trilogy-R.G._Mechanics" class="detLink" title="Detalles para Batman.Arkham.Trilogy-R.G. Mechanics">Batman.Arkham.Trilogy-R.G. Mechanics</a>
  2. </div>
  3. <a href="magnet:?xt=urn:btih:e923a34e95e267c6ae6ff4766deb3b4729a4a350&amp;dn=Batman.Arkham.Trilogy-R.G.+Mechanics&amp;tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80&amp;tr=udp%3A%2F%2Ftracker.publicbt.com%3A80&amp;tr=udp%3A%2F%2Ftracker.istole.it%3A6969&amp;tr=udp%3A%2F%2Ftracker.ccc.de%3A80&amp;tr=udp%3A%2F%2Fopen.demonii.com%3A1337" title="Download this torrent using magnet"><img src="/static/img/icon-magnet.gif" alt="Magnet link"></a><a href="/user/Taker009"><img src="/static/img/trusted.png" alt="Trusted" title="Trusted" style="width:11px;" border="0"></a><img src="/static/img/11x11p.png">
  4.                         <font class="detDesc">Subido Hoy&nbsp;05:05, Tamaño 25.36&nbsp;GiB, ULed por <a class="detDesc" href="/user/Taker009/" title="Explorar Taker009">Taker009</a></font>
  5.                 </td>
  6.                 <td align="right">3</td>
  7.                 <td align="right">106</td>
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Mi plan es capturar el link magnet, después la información que está entre esto: <font class="detDesc">(.*?)<\/font> y después dos números que están los dos en la misma etiqueta que son estos dos <td align="right">(.*?)<\/td><td align="right">(.*?)<\/td>.

El problema es que mi regex no me devuelve nada, por eso quería preguntarles qué hice mal en el código.
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Publicidad

Re: Expresiones regulares en página de torrent

Notapor explorer » 2013-11-27 16:40 @736

Tienes que usar la opción '/s' para indicar que el comodín '.' coincide con caracteres de fin de línea (o dicho de otra manera, que $code consiste en una sola línea). Además, no estabas indicando caracteres entre las dos marcas <td>.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $code = <<"HTML";
  2. <a href="/torrent/9254599/Batman.Arkham.Trilogy-R.G._Mechanics" class="detLink" title="Detalles para Batman.Arkham.Trilogy-R.G. Mechanics">Batman.Arkham.Trilogy-R.G. Mechanics</a>
  3. </div>
  4. <a href="magnet:?xt=urn:btih:e923a34e95e267c6ae6ff4766deb3b4729a4a350&amp;dn=Batman.Arkham.Trilogy-R.G.+Mechanics&amp;tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80&amp;tr=udp%3A%2F%
  5.                            <font class="detDesc">Subido Hoy&nbsp;05:05, Tamaño 25.36&nbsp;GiB, ULed por <a class="detDesc" href="/user/Taker009/" title="Explorar Taker009">Taker009</
  6.                 </td>
  7.                 <td align="right">3</td>
  8.                 <td align="right">106</td>
  9. HTML
  10.  
  11. if ($code =~ /<a href="(.+?)" title="Download this torrent .+? class="detDesc">(.*?)<.+?<td align="right">(.*?)<.+?<td align="right">(.*?)</si) {
  12.     say $1;
  13.     say $2;
  14.     say $3;
  15.     say $4;
  16. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Expresiones regulares en página de torrent

Notapor BigBear » 2013-11-27 19:23 @849

Perdón, explorer, pero me faltó aclarar que $code es la carga de la página piratebay por lo que no es una línea y no encuentra bien los regexs en tu código.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use LWP::UserAgent;
  2.  
  3. my $nave = LWP::UserAgent->new;
  4. $nave->agent(
  5. "Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8.1.12) Gecko/20080201Firefox/2.0.0.12"
  6. );
  7.  
  8. my $code = toma("http://thepiratebay.sx/search/batman%20arkham/0/99/0");
  9.  
  10. if ($code =~ /<a href="(.+?)" title="Download this torrent .+? class="detDesc">(.*?)<.+?<td align="right">(.*?)<.+?<td align="right">(.*?)</si) {
  11.     print "\n". $1;
  12.     print "\n" .  $2;
  13.    print "\n" . $3;
  14.     print "\n" . $4;
  15. }
  16.  
  17. sub toma {
  18.     return $nave->get( $_[0] )->content;
  19. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Expresiones regulares en página de torrent

Notapor explorer » 2013-11-28 05:52 @286

Las expresiones regulares de mi código están ajustadas al código HTML que publicaste. Si son distintos, pues entonces no las encontrará, claro.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Expresiones regulares en página de torrent

Notapor BigBear » 2013-11-28 08:12 @383

explorer, tengo un problema. Intenté cambiar la forma en que declaraste $code por comillas simples y el código no funciona.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.     use LWP::UserAgent;
  2.      
  3.     my $nave = LWP::UserAgent->new;
  4.     $nave->agent(
  5.     "Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8.1.12) Gecko/20080201Firefox/2.0.0.12"
  6.     );
  7.      
  8.     #my $code = toma("http://thepiratebay.sx/search/batman%20arkham/0/99/0");
  9.  
  10. my $code = '
  11. <a href="/torrent/9254599/Batman.Arkham.Trilogy-R.G._Mechanics" class="detLink" title="Detalles para Batman.Arkham.Trilogy-R.G. Mechanics">Batman.Arkham.Trilogy-R.G. Mechanics</a>
  12. </div>
  13. <a href="magnet:?xt=urn:btih:e923a34e95e267c6ae6ff4766deb3b4729a4a350&amp;dn=Batman.Arkham.Trilogy-R.G.+Mechanics&amp;tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80&amp;tr=udp%3A%2F%
  14.                           <font class="detDesc">Subido Hoy&nbsp;05:05, Tamaño 25.36&nbsp;GiB, ULed por <a class="detDesc" href="/user/Taker009/" title="Explorar Taker009">Taker009</
  15.                </td>
  16.                <td align="right">3</td>
  17.                <td align="right">106</td>
  18. ';
  19.      
  20.     if ($code =~ /<a href="(.+?)" title="Download this torrent .+? class="detDesc">(.*?)<.+?<td align="right">(.*?)<.+?<td align="right">(.*?)</sig) {
  21.         print "\n". $1;
  22.         print "\n" .  $2;
  23.        print "\n" . $3;
  24.         print "\n" . $4;
  25.     }
  26.      
  27.     sub toma {
  28.         return $nave->get( $_[0] )->content;
  29.     }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


¿ Qué hice mal ?
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Expresiones regulares en página de torrent

Notapor explorer » 2013-11-28 10:42 @487

La marca '<a>' de la línea 13 está cortada.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Expresiones regulares en página de torrent

Notapor BigBear » 2013-11-28 13:02 @584

Ok, ya he avanzado en el código ahora solo me falta el último y final detalle: hacer que busque todos los resultados de la página de torrents (http://thepiratebay.sx/search/batman%20arkham/0/99/0). El tema es tengo que cambiar el if() por un while() en el siguiente código.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use LWP::UserAgent;
  2.  
  3. my $nave = LWP::UserAgent->new;
  4. $nave->agent(
  5. "Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8.1.12) Gecko/20080201Firefox/2.0.0.12"
  6. );
  7.              
  8. my $code = toma("http://thepiratebay.sx/search/batman%20arkham/0/99/0");
  9.  
  10. chomp $code;
  11.  
  12. #if ($code =~ /<a href="magnet(.*)" title="Download this torrent using magnet"(.*)<font class="detDesc">(.*)<\/font>(.*)<td align="right">(.*)<\/td>(.*)<td align="right">(.*)<\/td>(.*)/migs) {
  13.  
  14.  
  15.  
  16. while($code =~ /(.*)class="detLink" title="Detalles para (.*)">(.*)<a href="magnet(.*)" title="Download this torrent using magnet"(.*)<font class="detDesc">(.*)<\/font>(.*)<td align="right">(.*)<\/td>(.*)<td align="right">(.*)<\/td>(.*)/migs) {
  17.  
  18. my $nombre = $2;
  19. my $link_torrent = magnet.$4;
  20. my $limpiando_data = $6;
  21. my $data;
  22. my $seeders = $8;
  23. my $leechers = $10;
  24.  
  25. if($limpiando_data=~/(.*), ULed por(.*)/) {
  26. $limpiando_data_2 = $1;
  27. $limpiando_data_2=~s/&nbsp;/ /migs;
  28. $data = $limpiando_data_2;
  29. }
  30.  
  31. print "\n[+] Nombre : ".$nombre;
  32. #print " \n[+] Link : ".$link_torrent;
  33. print "\n[+] Informacion : ".$data.", Seeders $seeders, Leechers $leechers";
  34.  
  35. }
  36.  
  37. sub toma {
  38.     return $nave->get( $_[0] )->content;
  39. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


El problema es que solo muestra el primer resultado y necesito que lo haga con todos los resultados.

¿ Qué estoy haciendo mal ?

P.D.: Qué desgracia, acabo de probar mi código con la página y no con la porción de código y no me tiró nada de nada al contrario de cuando usaba la porción de código. Parece que hay algún error en mi regex.
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Expresiones regulares en página de torrent

Notapor explorer » 2013-11-28 16:11 @716

Estás usando comodines '.' con el modificador avaricioso '*', y tiene como efecto que, con solo uno de ellos, se "come" casi toda la página.

Debes usar el modo 'no avaricioso': .*?
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Expresiones regulares en página de torrent

Notapor BigBear » 2013-11-28 16:24 @725

Sí, ya había probado con (.*?) pero sigue siendo el mismo resultado. Creo que hice algo mal en otra parte del código.
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados