Una de las características más solicitadas por los usuarios de WinAutomation siempre ha sido el uso proxies para las automatizaciones del navegador.
Es aquí donde UBot le fue comiendo terreno, ya que además incorporaba otras funcionalidades imprescindibles como el multithreading, rotura de captchas o el incorporar un navegador decente.
En este artículo de hoy quería introduciros un servicio que os facilita la rotación de proxies, es sencillo y económico. Por supuesto, también podrás usarlo con tu lenguaje de programación preferido aunque voy a comentar como hacerlo en WA para suplir esta pequeña carencia y poder escrapear cómodamente.
Se trata de Scraper API, y tal y como dice en su página web, Scraper API handles proxies, browsers, and CAPTCHAs for you, so you can get the HTML from any web page with a simple API call.
Es decir, nos ofrecen una API a través de la cual podemos solicitar una dirección web y nos devolverá la respuesta, con toda una serie de ventajas como rotura de captchas, renderizado de JavaScript, rotación de IPs, envío de cabeceras, POST Requests, etc.
En vez de hacer la petición web directamente, la enviaremos a través de su servicio de este modo:
https://api.scraperapi.com?key=APIKEY&url=http://webdeejemplo.com/
Sustituyendo APIKEY por una clave que nos proporcionarán al registrarnos, y cambiando el parámetro URL por la web de destino que queremos obtener.
Para empezar y probar el servicio puedes acceder a:
Y crear una cuenta de prueba, que te permitirá 1000 peticiones mensuales. No te preocupes, son suficientes para que puedas comprobar la calidad del servicio.
Una vez te registres, verás una API Key, que será similar a: c08ef7620f3c7f8bbe2d988470d68210, clave api inventada que utilizaré en este tutorial como ejemplo.
Para comprobar que funciona abre un terminal y escribe:
curl "https://api.scraperapi.com?key=c08ef7620f3c7f8bbe2d988470d68210&url=http://www.ryanstudios.com/"
Una vez hayas introducido el comando verás que se realiza la solicitud y recibes un volcado con la respuesta HTML.
C:\>curl "https://api.scraperapi.com?key=c08ef7620f3c7f8bbe2d988470d68210&url=http://www.ryanstudios.com" <!DOCTYPE html> <html lang="es"> <head> <title>Ryan Studios</title> <link href="vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet"> <link href="css/default.css" rel="stylesheet"> </head> <body id="page-top"> <header class="masthead d-flex"> <div class="container text-center my-auto"> <h1 class="mb-1">Ryan Studios</h1> <h3 class="mb-5"><em>Publicidad en Google AdWords y Automatización</em></h3> <a class="btn btn-xl btn-light mr-4" href="http://semsacional.es/">SEMSACIONAL</a> <a class="btn btn-xl btn-dark" href="https://scraper.es/">SCRAPER</a> </div> </header> </body> </html> C:\>
Tienes la opción de guardarlo en un fichero para revisarlo cómodamente.
Añade > prueba.html al final del comando anterior.
curl "https://api.scraperapi.com?key=c08ef7620f3c7f8bbe2d988470d68210&url=http://www.ryanstudios.com/" > prueba.html
Pero veamos como hacerlo en WinAutomation.
Crea un nuevo Proceso desde Process Designer y añade una acción Download from Web:
En URL añade la ruta que habíamos probado antes con el curl, sin las comillas.
Recuerda sustituir MiAPI por tu propia clave, que en mi caso sería:
api.scraperapi.com?key=c08ef7620f3c7f8bbe2d988470d68210&url=http://www.cualesmiip.com
En la imagen superior puedes ver que accedo a la web cualesmiip.com y recibiré la respuesta HTML en la variable %WebPageText% que viene por defecto.
Una vez hemos recibido la petición a través de los proxies de scraperapi.com parseamos el contenido.
Con la acción Parse Text voy a extraer la información que me interesa, en este caso quiero sacar la IP del proxy.
¡Y ya esta! Es que son solo dos pasos.
Puedes ayudarte del depurador para ver el estado de las variables.
En caso de que incluyamos query strings o caracteres especiales en las rutas, necesitaremos hacer un URLEncode a las direcciones antes de enviarlas.
Puedes incluir una acción Run VBScript para codificar la cadena.
Dim ToPrint ToPrint = URLEncode("%StringToEncode%") Wscript.echo ToPrint Function URLEncode(ByVal str) Dim strTemp, strChar Dim intPos, intASCII strTemp = "" strChar = "" For intPos = 1 To Len(str) intASCII = Asc(Mid(str, intPos, 1)) If intASCII = 32 Then strTemp = strTemp & "+" ElseIf ((intASCII < 123) And (intASCII > 96)) Then strTemp = strTemp & Chr(intASCII) ElseIf ((intASCII < 91) And (intASCII > 64)) Then strTemp = strTemp & Chr(intASCII) ElseIf ((intASCII < 58) And (intASCII > 47)) Then strTemp = strTemp & Chr(intASCII) Else strChar = Trim(Hex(intASCII)) If intASCII < 16 Then strTemp = strTemp & "\%0" & strChar Else strTemp = strTemp & "\%" & strChar End If End If Next URLEncode = strTemp End Function
Espero que esta información te sirva como base para poder utilizar Scraper API con WinAutomation o cualquier otro lenguaje de programación.
Por último, quiero aclarar que aunque siempre he usado WinAutomation de forma intensiva, la subida paulatina del precio de la licencia es algo que me impide utilizarlo más a menudo en ciertos trabajos y es que la licencia profesional plus está en estos momentos en 1.499$ y otros tantos de mantenimiento (Software Assurance Plan).
No obstante, la herramienta se amortiza rápidamente y la sencillez a la hora de programar salta a la vista.
Si tienes dudas sobre alguna tarea de automatización y quieres saber si este programa sería adecuado para hacer ese trabajo, puedes consultarme y te explicaré cualquiera de sus funciones.