Página 1 de 1

Search function help

Publicado: 06 Ago 2015, 17:05
por zanzibar1982
Hola,

on website "http://www.guardarefilm.tv" we have a search function like this

(I looked for "potter"):

Código: Seleccionar todo

<div id="searchtable" name="searchtable" class="searchtable"><form name="fullsearch" id="fullsearch" action="http://www.guardarefilm.tv/index.php?do=search" method="post">
<input type="hidden" name="do" id="do" value="search" />
<input type="hidden" name="subaction" id="subaction" value="search" />
<input type="hidden" name="search_start" id="search_start" value="0" />
<input type="hidden" name="full_search" id="full_search" value="0" />
<input type="hidden" name="result_from" id="result_from" value="1" /><table cellpadding="4" cellspacing="0" width="100%">
  <tr>
    <td class="search">
      <div style="margin:10px;">
                <input type="text" name="story" id="searchinput" value="potter" class="textin" style="width:250px" /><br /><br />
                <input type="button" class="bbcodes" name="dosearch" id="dosearch" value="Search" onclick="javascript:list_submit(-1); return false;" />
                <input type="button" class="bbcodes" name="dofullsearch" id="dofullsearch" value="Ricerca avanzata" onclick="javascript:full_submit(1); return false;" />
            </div>
Any hint about translating this to python?

Gracias

Re: Search function help

Publicado: 06 Ago 2015, 21:00
por robalo
Para extraer los datos de varias formas, para gustos colores :) Todo dependerá de los datos que quieras usar.

Algunas web usan más de un formato para las búsquedas, también algunas web aceptan el método POST y GET. También, dependiendo de la forma que queramos pedir los datos, podrá tener o no un mínimo de parámetros. Tenemos que tener bastante claro lo que queremos hacer.

Si sólo quieres la forma más sencilla de conseguir los datos, para esta web creo que un formato válido con el método GET podría ser

Código: Seleccionar todo

http://www.guardarefilm.tv/?do=search&subaction=search&story=potter
Si quieres pasarle todos los parámetro del formulario lo puedes hacer uno a uno con la función de screpertools find_single_match o get_match, o bien con re.complile..... que estás acostumbrado a ver en los canales o re.findall... como más tw guste. Con re.compile... podría ser algo así

Código: Seleccionar todo

data = '''<div id="searchtable" name="searchtable" class="searchtable"><form name="fullsearch" id="fullsearch" action="http://www.guardarefilm.tv/index.php?do=search" method="post">
<input type="hidden" name="do" id="do" value="search" />
<input type="hidden" name="subaction" id="subaction" value="search" />
<input type="hidden" name="search_start" id="search_start" value="0" />
<input type="hidden" name="full_search" id="full_search" value="0" />
<input type="hidden" name="result_from" id="result_from" value="1" /><table cellpadding="4" cellspacing="0" width="100%">
  <tr>
    <td class="search">
      <div style="margin:10px;">
                <input type="text" name="story" id="searchinput" value="potter" class="textin" style="width:250px" /><br /><br />
                <input type="button" class="bbcodes" name="dosearch" id="dosearch" value="Search" onclick="javascript:list_submit(-1); return false;" />
                <input type="button" class="bbcodes" name="dofullsearch" id="dofullsearch" value="Ricerca avanzata" onclick="javascript:full_submit(1); return false;" />
            </div>'''

post = re.compile( '<.*?name="([^"]+)".*?value="([^"]+)".*?/>', re.DOTALL).findall( data )
print "Post: %s" % post
post = urllib.urlencode( post )
print "Post: %s" % post
El resultado sería:

Código: Seleccionar todo

Post: [('searchtable', 'search'), ('subaction', 'search'), ('search_start', '0'), ('full_search', '0'), ('result_from', '1'), ('story', 'potter'), ('dosearch', 'Search'), ('dofullsearch', 'Ricerca avanzata')]
Post: searchtable=search&subaction=search&search_start=0&full_search=0&result_from=1&story=potter&dosearch=Search&dofullsearch=Ricerca+avanzata

Re: Search function help

Publicado: 07 Ago 2015, 00:15
por zanzibar1982
Thank you for the preciuos infos, robalo :)

with your first hint I got this:

Código: Seleccionar todo

def search(item,texto):
    logger.info("[guardarefilm.py] "+item.url+" search "+texto)
    item.url = "http://www.guardarefilm.tv/?do=search&subaction=search&story="+texto
    try:
        return peliculas(item)
    # Se captura la excepción, para no interrumpir al buscador global si un canal falla
    except:
        import sys
        for line in sys.exc_info():
            logger.error( "%s" % line )
        return []
and it works perfect!

Regarding POST and GET I am sure they'll come handy with other sites :)

Re: Search function help

Publicado: 18 Ago 2015, 17:46
por zanzibar1982
Just wanted to thank robalo again for this as it helped fixing other sites' search function as filmstream.pw