Ayuda Expresiones regulares en python

Iniciado por juliianc95, Noviembre 15, 2013, 06:14:36 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Noviembre 15, 2013, 06:14:36 PM Ultima modificación: Noviembre 15, 2013, 07:51:40 PM por Expermicid

Buenas amigos, tengo una duda sobre expresiones regulares en python esta es mi duda:
Tengo un string que quiero sacar todos los h2 de hay. que metodo tendria que usar findall, search o usar grupos? un ejemplo de como quiero que quede.
Citar
Código: python
[<h2 class="tt_18 d_inline">
<a class="no_underline" title="" href="/peliculas/pelicula-1628/">
El Padrino
</a>
</h2>, <h2 class="tt_18 d_inline">
<a class="no_underline" title="" href="/peliculas/pelicula-211083/">
One Direction: This Is Us
</a>
</h2>, <h2 class="tt_18 d_inline">
<a class="no_underline" title="" href="/peliculas/pelicula-182745/">
Intocable
</a>
</h2>, <h2 class="tt_18 d_inline">
<a class="no_underline" title="" href="/peliculas/pelicula-132874/">
El caballero oscuro. La leyenda renace
</a>
</h2>, <h2 class="tt_18 d_inline">
<a class="no_underline" title="" href="/peliculas/pelicula-24944/">
Gladiator (El gladiador)
</a>
</h2>, <h2 class="tt_18 d_inline">
<a class="no_underline" title="" href="/peliculas/pelicula-115362/">
El caballero oscuro
</a>
</h2>, <h2 class="tt_18 d_inline">
<a class="no_underline" title="" href="/peliculas/pelicula-27070/">
El Señor de los Anillos: La Comunidad del Anillo
</a>
</h2>, <h2 class="tt_18 d_inline">
<a class="no_underline" title="" href="/peliculas/pelicula-10568/">
Forrest Gump
</a>
</h2>, <h2 class="tt_18 d_inline">
<a class="no_underline" title="" href="/peliculas/pelicula-9393/">
La lista de Schindler
</a>
</h2>, <h2 class="tt_18 d_inline">
<a class="no_underline" title="" href="/peliculas/pelicula-126123/">
Toy Story 3
</a>
</h2>, <h2 class="tt_18 d_inline">
<a class="no_underline" title="" href="/peliculas/pelicula-10126/">
Pulp Fiction
</a>
</h2>, <h2 class="tt_18 d_inline">
<a class="no_underline" title="" href="/peliculas/pelicula-22092/">
El sexto sentido
</a>
</h2>, <h2 class="tt_18 d_inline">
<a class="no_underline" title="" href="/peliculas/pelicula-6641/">
El silencio de los corderos
</a>
</h2>, <h2 class="tt_18 d_inline">
<a class="no_underline" title="" href="/peliculas/pelicula-39186/">
El Señor de los Anillos: Las dos torres
</a>
</h2>, <h2 class="tt_18 d_inline">
<a class="no_underline" title="" href="/peliculas/pelicula-190918/">
Django desencadenado
</a>
</h2>, <h2 class="tt_18 d_inline">
<a class="no_underline" title="" href="/peliculas/pelicula-130440/">
Marvel Los Vengadores
</a>
</h2>, <h2 class="tt_18 d_inline">
<a class="no_underline" title="" href="/peliculas/pelicula-13892/">
Seven
</a>
</h2>, <h2 class="tt_18 d_inline">
<a class="no_underline" title="" href="/peliculas/pelicula-11736/">
Cadena perpetua
</a>
</h2>, <h2 class="tt_18 d_inline">
<a class="no_underline" title="" href="/peliculas/pelicula-39187/">
El Señor de los Anillos: El retorno del Rey
</a>
</h2>, <h2 class="tt_18 d_inline">
<a class="no_underline" title="" href="/peliculas/pelicula-25801/">
Star wars: Episodio IV - Una nueva esperanza (La guerra de las galaxias)
</a>
</h2>]
[/quote]
[size=12pt]Muchas Gracias! de antemano.[/size]
[/size][/font]

Noviembre 15, 2013, 08:11:27 PM #1 Ultima modificación: Noviembre 15, 2013, 08:14:38 PM por pepeino123
Mijo no reinventes la rueda, no te tortures, si andas haciendo scraping usa el modulo No tienes permitido ver los links. Registrarse o Entrar a mi cuenta para esa tarea en especifico que quieres.

Seria tan simple como esto:
Código: php

from bs4 import BeautifulSoup
soup = BeautifulSoup(html_doc)

headers = soup.find_all('h2')

Obviamente html_doc puede ser esa cadena que tienes arriba o un archivo.

Y eso es todo estimado amigo.

Para instalar BeautifulSoup en Debian/Ubuntu con apt:
Código: php
pt-get install python-bs4


con easy_install:
Código: php
easy_install beautifulsoup4


Con pip
Código: php

pip install beautifulsoup4


Suerte con eso!

Tampoco es una expresión regular tan compleja como para usar una libreria externa. Así lo haría yo (con compile y findall):

Código: python
import re
import urllib

text = urllib.urlopen("http://www.sensacine.com/peliculas/en-cartelera/cines/").read()

expresion = re.compile("(<h2.+?</h2>)", re.DOTALL)

data = expresion.findall(text)

for u in data:
    print u, "\r\n"


Saludos!







No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

gracias, por la ayuda. pero ando usando mechanize se me olvido decir. y quiero extraer la informacion solo con expresiones regulares. sin ningun otro parametro ni nd. cual seria el code? gracias de antemano.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
gracias, por la ayuda. pero ando usando mechanize se me olvido decir. y quiero extraer la informacion solo con expresiones regulares. sin ningun otro parametro ni nd. cual seria el code? gracias de antemano.

¿qué información extraes con mechanize? si quieres pon el code y dime que quieres cambiar para poder ayudarte mejor

Saludos!







No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Gracias hermano. me sirvio me dio esto:
Citar
<h2 class="tt_18 d_inline">
<a class="no_underline" title="" href="/peliculas/pelicula-1628/">
El Padrino
</a>
</h2>
<h2 class="tt_18 d_inline">
<a class="no_underline" title="" href="/peliculas/pelicula-182745/">
Intocable
</a>
</h2>
<h2 class="tt_18 d_inline">
<a class="no_underline" title="" href="/peliculas/pelicula-211083/">
One Direction: This Is Us
</a>
</h2>
<h2 class="tt_18 d_inline">
<a class="no_underline" title="" href="/peliculas/pelicula-24944/">
Gladiator (El gladiador)
</a>
</h2>
<h2 class="tt_18 d_inline">
<a class="no_underline" title="" href="/peliculas/pelicula-132874/">
El caballero oscuro. La leyenda renace
</a>
</h2>
<h2 class="tt_18 d_inline">
<a class="no_underline" title="" href="/peliculas/pelicula-115362/">
El caballero oscuro
</a>
</h2>
<h2 class="tt_18 d_inline">
<a class="no_underline" title="" href="/peliculas/pelicula-27070/">
El Señor de los Anillos: La Comunidad del Anillo
</a>
</h2>
<h2 class="tt_18 d_inline">
<a class="no_underline" title="" href="/peliculas/pelicula-9393/">
La lista de Schindler
</a>
</h2>
<h2 class="tt_18 d_inline">
<a class="no_underline" title="" href="/peliculas/pelicula-10568/">
Forrest Gump
</a>
</h2>
<h2 class="tt_18 d_inline">
<a class="no_underline" title="" href="/peliculas/pelicula-126123/">
Toy Story 3
</a>
</h2>
<h2 class="tt_18 d_inline">
<a class="no_underline" title="" href="/peliculas/pelicula-10126/">
Pulp Fiction
</a>
</h2>
<h2 class="tt_18 d_inline">
<a class="no_underline" title="" href="/peliculas/pelicula-22092/">
El sexto sentido
</a>
</h2>
<h2 class="tt_18 d_inline">
<a class="no_underline" title="" href="/peliculas/pelicula-196666/">
Los juegos del hambre: En llamas
</a>
</h2>
<h2 class="tt_18 d_inline">
<a class="no_underline" title="" href="/peliculas/pelicula-6641/">
El silencio de los corderos
</a>
</h2>
<h2 class="tt_18 d_inline">
<a class="no_underline" title="" href="/peliculas/pelicula-39186/">
El Señor de los Anillos: Las dos torres
</a>
</h2>
<h2 class="tt_18 d_inline">
<a class="no_underline" title="" href="/peliculas/pelicula-190918/">
Django desencadenado
</a>
</h2>
<h2 class="tt_18 d_inline">
<a class="no_underline" title="" href="/peliculas/pelicula-130440/">
Marvel Los Vengadores
</a>
</h2>
<h2 class="tt_18 d_inline">
<a class="no_underline" title="" href="/peliculas/pelicula-13892/">
Seven
</a>
</h2>
<h2 class="tt_18 d_inline">
<a class="no_underline" title="" href="/peliculas/pelicula-11736/">
Cadena perpetua
</a>
</h2>
<h2 class="tt_18 d_inline">
<a class="no_underline" title="" href="/peliculas/pelicula-39187/">
El Señor de los Anillos: El retorno del Rey
</a>
</h2>
ahora amigo como hago para sacar todos los href agregandole algo alante. por ejemplo:
sasasa.com/peliculas/pelicula-39187/"

gracias de antemano.

En ese caso tendría que guardar la dirección del la web en una variable y con otra expresión regular sacas los href y luego concatenas la dirección de la web con el href

Saludos!







No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

CitarEn ese caso tendría que guardar la dirección del la web en una variable y con otra expresión regular sacas los href y luego concatenas la dirección de la web con el href

ok hermano pero tienes un ejemplo para entender mejor? gracias de antemano.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
CitarEn ese caso tendría que guardar la dirección del la web en una variable y con otra expresión regular sacas los href y luego concatenas la dirección de la web con el href

ok hermano pero tienes un ejemplo para entender mejor? gracias de antemano.

Código: python
# -*- coding: utf-8 -*-

import re
import urllib

text = urllib.urlopen("http://www.sensacine.com/peliculas/en-cartelera/cines/").read()
expresion = re.compile("(<h2.+?</h2>)", re.DOTALL)
data = expresion.findall(text)

for u in data:
    print "sasasa.com" + re.findall('<a.*?href="(.*?)".*?>', u)[0]


Saludos!







No tienes permitido ver los links. Registrarse o Entrar a mi cuenta