Página 1 de 2

Canal creado solo encuentra un elemento

Publicado: 15 Nov 2016, 15:55
por jvc99
Buenas, pues eso, he estado creando un canal y he conseguido que me scrape un elemento solo, el primero, no consigo que me scrape el resto de los elementos de la página, el codigo que he utilizado es este:

Código: Seleccionar todo

   # Descarga la página
    data = scrapertools.cachePage(item.url)

    # Extrae las entradas de la pagina seleccionada
    patronvideos = '<div class="vw-post-box vw-post-style-block vw-post-format-standard">.*?.<h3 class="vw-post-box-title">.*?.<a href="([^"]+)">(.*?)</a>'

    matches = re.compile(patronvideos,re.DOTALL).findall(data)
    if DEBUG: scrapertools.printMatches(matches)
    itemlist = []

    for scrapedurl,scrapedtitle in matches:
        url = urlparse.urljoin(item.url,scrapedurl)
        title = scrapedtitle.strip()

        # Añade al listado
        itemlist.append( Item(channel=item.channel, action="findvideos", title=title , fulltitle=title, url=url , viewmode="movie", folder=True) )
    return itemlist
Un saludo compañeros, y espero poder hacer un canal decente para que todos lo podamos disfrutar :))

Re: Canal creado solo encuentra un elemento

Publicado: 15 Nov 2016, 16:05
por SeiTaN
Sin saber la url desde la que obtienes los datos es dificil saber que es exactamente lo que te falla.

Si solo te muestra un dato y es el primero, sería como este ejemplo.

"seleccioname todos los niños que sean el primero de la lista" = 1
"seleccioname todos los niños" = n

Ahora tienes que ver que parte de la expresion regular hace que marque "el primero de la lista" y eliminarlo.

Re: Canal creado solo encuentra un elemento

Publicado: 15 Nov 2016, 17:22
por jvc99
Buenas Seitan, te inserto el código completo

Código: Seleccionar todo

# -*- coding: utf-8 -*-
#------------------------------------------------------------
# pelisalacarta - XBMC Plugin
# http://blog.tvalacarta.info/plugin-xbmc/pelisalacarta/
#------------------------------------------------------------
import re
import urlparse

from core import config
from core import logger
from core import scrapertools
from core.item import Item

DEBUG = config.get_setting("debug")


def mainlist(item):
    logger.info("pelisalacarta.channels.pruebitase mainlist")

    if item.url=="":
        item.url = "http://paginapruebas.esy.es/"

    # Descarga la página
    data = scrapertools.cachePage(item.url)

    # Extrae las entradas de la pagina seleccionada
    patronvideos = '<div class="vw-post-box vw-post-style-block vw-post-format-standard">.*?.<h3 class="vw-post-box-title">.*?.<a href="([^"]+)">(.*?)</a>'

    matches = re.compile(patronvideos,re.DOTALL).findall(data)
    if DEBUG: scrapertools.printMatches(matches)
    itemlist = []

    for scrapedurl,scrapedtitle in matches:
        url = urlparse.urljoin(item.url,scrapedurl)
        title = scrapedtitle.strip()

        # Añade al listado
        itemlist.append( Item(channel=item.channel, action="findvideos", title=title , fulltitle=title, url=url , viewmode="movie", folder=True) )
    return itemlist
¿Ves algún error?

Re: Canal creado solo encuentra un elemento

Publicado: 15 Nov 2016, 18:35
por SeiTaN
Ahí tienes las 4 pelis

Código: Seleccionar todo

# -*- coding: utf-8 -*-
# ------------------------------------------------------------
# pelisalacarta - XBMC Plugin
# http://blog.tvalacarta.info/plugin-xbmc/pelisalacarta/
# ------------------------------------------------------------
import re
import urlparse

from core import config
from core import logger
from core import scrapertools
from core.item import Item

DEBUG = config.get_setting("debug")


def mainlist(item):
    logger.info("pelisalacarta.channels.pruebitase mainlist")

    if item.url == "":
        item.url = "http://paginapruebas.esy.es/"

    # Descarga la página
    data = scrapertools.cache_page(item.url)
    data = re.sub(r"\n|\r|\t|\s{2}", "", data)

    # Extrae las entradas de la pagina seleccionada
    patron = '<h3 class="vw-post-box-title"><a href="([^"]+)".*?>(.*?)</a></h3>'

    matches = re.compile(patron, re.DOTALL).findall(data)
    if DEBUG:
        scrapertools.printMatches(matches)
    itemlist = []

    for scrapedurl, scrapedtitle in matches:
        url = urlparse.urljoin(item.url,scrapedurl)
        title = scrapedtitle.strip()

        # Añade al listado
        itemlist.append(Item(channel=item.channel, action="findvideos", title=title , fulltitle=title, url=url,
                             viewmode="movie", folder=True) )
    return itemlist

Re: Canal creado solo encuentra un elemento

Publicado: 15 Nov 2016, 18:45
por Hernan_Ar_c
yo te recomiendo que uses, la pagina http://regexr.com/ para comprobar tus expresiones, es muy fácil y te evita quebraderos de cabeza, simplemente copia y pega el código fuente de la pagina en la parte Text y tu expresión regular en Expressión y ahí mismo te dice cuanto resultados encuentra tu expresión.

Saludos y espero que te sirva.

Re: Canal creado solo encuentra un elemento

Publicado: 15 Nov 2016, 19:25
por jvc99
SeiTaN escribió:Ahí tienes las 4 pelis

Código: Seleccionar todo

# -*- coding: utf-8 -*-
# ------------------------------------------------------------
# pelisalacarta - XBMC Plugin
# http://blog.tvalacarta.info/plugin-xbmc/pelisalacarta/
# ------------------------------------------------------------
import re
import urlparse

from core import config
from core import logger
from core import scrapertools
from core.item import Item

DEBUG = config.get_setting("debug")


def mainlist(item):
    logger.info("pelisalacarta.channels.pruebitase mainlist")

    if item.url == "":
        item.url = "http://paginapruebas.esy.es/"

    # Descarga la página
    data = scrapertools.cache_page(item.url)
    data = re.sub(r"\n|\r|\t|\s{2}", "", data)

    # Extrae las entradas de la pagina seleccionada
    patron = '<h3 class="vw-post-box-title"><a href="([^"]+)".*?>(.*?)</a></h3>'

    matches = re.compile(patron, re.DOTALL).findall(data)
    if DEBUG:
        scrapertools.printMatches(matches)
    itemlist = []

    for scrapedurl, scrapedtitle in matches:
        url = urlparse.urljoin(item.url,scrapedurl)
        title = scrapedtitle.strip()

        # Añade al listado
        itemlist.append(Item(channel=item.channel, action="findvideos", title=title , fulltitle=title, url=url,
                             viewmode="movie", folder=True) )
    return itemlist

Muchas gracias Seitan ;) ;)

Re: Canal creado solo encuentra un elemento

Publicado: 15 Nov 2016, 19:26
por jvc99
Hernan_Ar_c escribió:yo te recomiendo que uses, la pagina http://regexr.com/ para comprobar tus expresiones, es muy fácil y te evita quebraderos de cabeza, simplemente copia y pega el código fuente de la pagina en la parte Text y tu expresión regular en Expressión y ahí mismo te dice cuanto resultados encuentra tu expresión.

Saludos y espero que te sirva.
Y en mi caso, cual seria la expresión? La pongo en regexr y me da error.

Re: Canal creado solo encuentra un elemento

Publicado: 15 Nov 2016, 19:46
por SeiTaN
Yo uso regex100.com

https://regex101.com/r/cR8aC9/6

La expresion es <h3 class="vw-post-box-title"><a href="([^"]+)".*?>(.*?)</a></h3> usando como delimitiador '

En el texto donde tiene que buscar es lo que salga de data.

Código: Seleccionar todo

    # Descarga la página
    data = scrapertools.cache_page(item.url)
    data = re.sub(r"\n|\r|\t|\s{2}", "", data)
    logger.debug("data es %s) % data)
Si te fijas despues de obtener los datos de la página, lo que se hace es eliminar los saltos de línea, espacios, tabulaciones... data = re.sub(r"\n|\r|\t|\s{2}", "", data) Asi resulta más sencillo usar expresiones regulares sin tener que meter comodines y demás.

Re: Canal creado solo encuentra un elemento

Publicado: 15 Nov 2016, 20:11
por Hernan_Ar_c
Que buen truco ese SeiTaN la verdad, nunca lo había utilizado... todos los días se aprende algo nuevo :lol:
Pero si como comentas mirando la expresión utilizada el problema en si son los saltos de linea, la manera sin el excelente truco de SeiTaN seria...

Código: Seleccionar todo

<h3 class="vw-post-box-title">\n.*?<a href="([^"]+)".*?>(.*?)<\/a>\n.*?<\/h3>
\n significa salto de linea.

Ah y el error que te da en regexr, es por que tenes que escapar los signos "/" con "\" antes fíjate en como lo escribí arriba

Saludos y suerte con ese canal yo también soy bastante nuevo y me tomo tiempo aprender como armar los canales, pero no es imposible hay que ponerle ganas nada mas.

Re: Canal creado solo encuentra un elemento

Publicado: 15 Nov 2016, 22:04
por jvc99
Muchas gracias a los dos :), ya me manejo mucho mejor, he hecho un buscador y he añadido las thumbnails. Lo único que no consigo hacer funcionar es que me reproduzca directamente la película, sin que me lleve a la siguiente ventana que dice "Enlace encontrado con openload", ¿hay alguna método que no sea muy engorroso para hacer esto?