como automatizar este proceso?

se0

proceso diario que debería:
1) logearse pagina web
2) navegar por esa pagina hasta una determinada sección
3) aplicar N filtros
4) clickar boton q lanza la descarga de un csv.
5) procesar el csv y devolverlo.

Como podria hacer los puntos 1 al 4?? (la idea es tener un servicio heroku al q yo llame desde otro sitio y haga todo esto, pero no se con que tecnologia esto seria posible. ( se debería hacer como pongo en los puntos ya que no hay API de conexión ni puedo atacar a su bd)

Alguna idea??

Un saludo.

Nucklear

Con un simple script en cualquier lenguaje se puede hacer si mayor problema:

1- Puedes usar urllib o httplib de python o curl para loguearte en cualquier web, con la cookie resultante validas el resto de requests.
2- Haces una request a la URL de esa determinada sección autenticandote con la cookie (con cualquiera de las herramientas del paso 1)
3- No se a que te refieres con N filtros si especificas un poco mas te lo detallo.
4- Habría que saber que es ese "boton" si es un enlace simplemente sigue la URL...
5- Parseas y devuelves el output resultante

Si no es una URL estática tendras que codear un scraper para la web para extraer el contenido que necesites.

2 respuestas
allmy

#1

1- Como dice #2 utilizaría python, a mi me convence más cookielib cookiejar, sería algo así:

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
login_data = urllib.urlencode({'name' : username, 'password' : password, 'cookie' : '1'})
opener.open('http://www.mediavida.com/login.php', login_data)
return opener

Ese es el ejemplo para MV xD

2- Utilizando el Opener que te devuelve, navegas por la página como si estuvieras logueado.
3- Depende de lo que quieras. Si son opciones, pueden ser parte de una cookie, en cuyo caso tendrás que actualizarla, o parte del servidor en cuyo caso con la request te vale. Si lo quieres hacer a mano, eso ya...

El resto ya lo han dicho.

1 respuesta
se0

#2 #3 wow que velocidad de respuestas, gracias!

voy a probar con python,
#2 el boton es una url y por lo que veo la navegación me la puedo ahorrar solo tengo que logear y atacar a a esa url con distintos parámetros.

Merci!!

se0

Consigo logarme y todo OK pero cuando hago el response = opener.open(login_url, login_data)
me devuelve html de la pagina donde esta el boton en vez del csv!
la url que le estoy pasando es a la que apunta el boton, si la pego en el navegador me baja directamente el csv. Sabeis pq puede ser?

Mi código (login_url es a la que apunta el boton)

import urllib, urllib2
import cookielib

base_url = 'XXXXXXXXXX'
# set up a cookie jar to store cookies
cj = cookielib.MozillaCookieJar('test.txt')

# set up opener to handle cookies, redirects etc
opener = urllib2.build_opener(
                                   urllib2.HTTPRedirectHandler(),
                                   urllib2.HTTPHandler(debuglevel=0),
                                   urllib2.HTTPSHandler(debuglevel=0),
                                   urllib2.HTTPCookieProcessor(cj)
                                   )
# pretend we're a web browser and not a python script
opener.addheaders = [('User-agent',
                      ('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_7) '
                       'AppleWebKit/535.1 (KHTML, like Gecko) '
                       'Chrome/13.0.782.13 Safari/535.1'))
                     ]
# open the front page of the website to set
# and save initial cookies
response = opener.open(base_url)
cj.save()
login_data = urllib.urlencode({
                              'username' : 'XXXXXXXXX',
                              'password' : 'XXXXXXXX',
                              'remember_me' : True
                              })
# construct the url
login_url = 'XXXXXXXXXX?loadonly=0&chktz=1&report_on=source.mpl%3Fq4%3Dagent_wfm%26rtype%3Dgroup&runnew=0&namedreport_id=103544&title=Agent%20Status%20Summary%20by%20Agent&since=month&d2=2014-01-17%2000%3A00%3A00&ddays=1&dhours=0&dminutes=0&g_fullname=on&g_username=on&rtype=group&run=1&q4=agent_wfm&f_first_signon=on&f_final_signoff=on&f_calls_offered=on&f_calls_answered=on&f_calls_transferred=on&f_login_session_count=on&f_total_time=on&f_available_time=on&f_available_time_pct=on&f_busy_time=on&f_busy_time_pct=on&f_idle_time=on&f_idle_time_pct=on&f_notready_time=on&f_notready_time_pct=on&fcm=away_reason_sys&runanyway=0&terse=1&taskid=115410233&_rendercsv=tbl'
# then open it
response = opener.open(login_url, login_data)
# save the cookies and return the response
cj.save()

print response.read()

Usuarios habituales

  • se0
  • allmy
  • Nucklear