Anuncio publicitario
El rastreo web es extremadamente útil para automatizar ciertas tareas que se realizan de forma rutinaria en sitios web. Puede escribir un rastreador para interactuar con un sitio web como lo haría un humano.
En un artículo anterior Cómo construir un rastreador web básico para extraer información de un sitio web¿Alguna vez quisiste capturar información de un sitio web? A continuación, le mostramos cómo escribir un rastreador para navegar por un sitio web y extraer lo que necesita. Lee mas , cubrimos los conceptos básicos para escribir un webcrawler ¿Qué es el web scraping? Cómo recopilar datos de sitios web¿Alguna vez se encontró perdiendo un tiempo valioso leyendo datos en páginas web? A continuación, le indicamos cómo encontrar los datos que desea con el web scraping. Lee mas usando el módulo de python, scrapy. La limitación de ese enfoque es que el rastreador no admite javascript. No funcionará correctamente con aquellos sitios web que hacen un uso intensivo de javascript para administrar la interfaz de usuario. Para tales situaciones, puede escribir un rastreador que use Google Chrome y, por lo tanto, pueda manejar javascript como un navegador Chrome normal manejado por el usuario.
Automatizar Google Chrome implica el uso de una herramienta llamada Selenio. Es un componente de software que se encuentra entre su programa y el navegador, y le ayuda a conducir el navegador a través de su programa. En este artículo, lo guiamos a través del proceso completo de automatización de Google Chrome. Los pasos generalmente incluyen:
- Configurar selenio
- Uso de Google Chrome Inspector para identificar secciones de la página web
- Escribir un programa java para automatizar Google Chrome
A los efectos del artículo, investiguemos cómo leer Google Mail desde Java. Si bien Google proporciona una API (interfaz de programación de aplicaciones) para leer el correo, en este artículo usamos Selenium para interactuar con Google Mail para demostrar el proceso. Google Mail hace un uso intensivo de JavaScript y, por lo tanto, es un buen candidato para aprender Selenium.
Configuración de selenio
Controlador web
Como se explicó anteriormente, Selenio consta de un componente de software que se ejecuta como un proceso independiente y realiza acciones en nombre del programa java. Este componente se llama Controlador web y debe descargarse en su computadora.
haga clic aquí para ir al sitio de descarga de Selenium, haga clic en la última versión y descargue el archivo apropiado para el sistema operativo de su computadora (Windows, Linux o MacOS). Es un archivo ZIP que contiene chromedriver.exe. Extraerlo a un lugar adecuado como C: \ WebDrivers \ chromedriver.exe. Usaremos esta ubicación más adelante en el programa java.
Módulos de Java
El siguiente paso es configurar los módulos de Java necesarios para utilizar Selenium. Suponiendo que está utilizando Maven para construir el programa java, agregue la siguiente dependencia a su POM.xml.
org.seleniumhq.selenium selenium-java 3.8.1
Cuando ejecuta el proceso de compilación, todos los módulos necesarios deben descargarse y configurarse en su computadora.
Primeros pasos del selenio
Comencemos con Selenium. El primer paso es crear un ChromeDriver ejemplo:
Controlador WebDriver = nuevo ChromeDriver ();
Eso debería abrir una ventana de Google Chrome. Naveguemos a la página de búsqueda de Google.
driver.get (" http://www.google.com");
Obtenga una referencia al elemento de entrada de texto para que podamos realizar una búsqueda. El elemento de entrada de texto tiene el nombre q. Localizamos elementos HTML en la página usando el método WebDriver.findElement ().
Elemento WebElement = driver.findElement (By.name ("q"));
Puedes enviar texto a cualquier elemento usando el método sendKeys (). Enviemos un término de búsqueda y terminemos con una nueva línea para que la búsqueda comience inmediatamente.
element.sendKeys ("terminador \ n");
Ahora que hay una búsqueda en curso, debemos esperar a la página de resultados. Podemos hacerlo de la siguiente manera:
new WebDriverWait (controlador, 10) .until (d -> d.getTitle (). toLowerCase (). startsWith ("terminator"));
Este código básicamente le dice a Selenium que espere 10 segundos y regrese cuando el título de la página comience con terminador. Usamos una función lambda para especificar la condición a esperar.
Ahora podemos obtener el título de la página.
System.out.println ("Título:" + driver.getTitle ());
Una vez que haya terminado con la sesión, la ventana del navegador se puede cerrar con:
driver.quit ();
Y eso, amigos, es una simple sesión de navegador controlada usando java a través de selenium. Parece bastante simple, pero le permite programar muchas cosas que normalmente tendría que hacer a mano.
Usando Google Chrome Inspector
Inspector de Google Chrome Resuelva los problemas del sitio web con las herramientas de desarrollo de Chrome o FirebugSi ha estado siguiendo mis tutoriales de jQuery hasta ahora, es posible que ya se haya encontrado con algunos problemas de código y no sepa cómo solucionarlos. Cuando se enfrenta a un fragmento de código no funcional, es muy ... Lee mas es una herramienta invaluable para identificar elementos que se utilizarán con Selenium. Nos permite apuntar al elemento exacto de Java para extraer información, así como una acción interactiva como hacer clic en un botón. Aquí hay una introducción sobre cómo usar el Inspector.
Abra Google Chrome y navegue a una página, diga la página de IMDb para Liga de la Justicia (2017).
Busquemos el elemento que queremos orientar, digamos el resumen de la película. Haga clic derecho en el resumen y seleccione "Inspeccionar" en el menú emergente.
En la pestaña "Elementos", podemos ver que el texto de resumen es un div con una clase de resumen_texto.
Usar CSS o XPath para la selección
Selenium admite la selección de elementos de la página mediante CSS. (El dialecto CSS admitido es CSS2). Por ejemplo, para seleccionar el texto de resumen de la página de IMDb anterior, escribiríamos:
WebElement summaryEl = driver.findElement (By.cssSelector ("div.summary_text"));
También puede usar XPath para seleccionar elementos de una manera muy similar (Ir aquí para las especificaciones). Nuevamente, para seleccionar el texto resumen, haríamos:
WebElement summaryEl = driver.findElement (By.xpath ("// div [@ class = 'summary_text']"));
XPath y CSS tienen capacidades similares para que pueda usar lo que le resulte más cómodo.
Leyendo Google Mail desde Java
Veamos ahora un ejemplo más complejo: obtener Google Mail.
Inicie el controlador de Chrome, navegue hasta gmail.com y espere hasta que se cargue la página.
Controlador WebDriver = nuevo ChromeDriver (); driver.get (" https://gmail.com"); new WebDriverWait (controlador, 10) .until (d -> d.getTitle (). toLowerCase (). startsWith ("gmail"));
A continuación, busque el campo de correo electrónico (se nombra con la identificación identifierId) e ingrese la dirección de correo electrónico. Haga clic en el próximo y espere a que se cargue la página de contraseña.
/ * Escriba nombre de usuario / correo electrónico * / {driver.findElement (By.cssSelector ("# identifierId")). sendKeys (correo electrónico); driver.findElement (By.cssSelector (". RveJvd")). click (); } nuevo WebDriverWait (controlador, 10) .until (d ->! d.findElements (By.xpath ("// div [@ id = 'contraseña']")). isEmpty ());
Ahora, ingresamos la contraseña, hacemos clic en el próximo de nuevo y espere a que se cargue la página de Gmail.
/ * Escriba la contraseña * / {controlador .findElement (By.xpath ("// div [@ id = 'contraseña'] // entrada [@ type = 'contraseña']")) .sendKeys (contraseña); driver.findElement (By.cssSelector (". RveJvd")). click (); } nuevo WebDriverWait (controlador, 10) .until (d ->! d.findElements (By.xpath ("// div [@ class = 'Cp']")). isEmpty ());
Obtenga la lista de filas de correo electrónico y recorra cada entrada.
Listafilas = controlador .findElements (By.xpath ("// div [@ class = 'Cp'] // tabla / tbody / tr")); para (WebElement tr: rows) { }
Para cada entrada, busque el De campo. Tenga en cuenta que algunas entradas De pueden tener varios elementos según la cantidad de personas en la conversación.
{/ * Desde elemento * / System.out.println ("Desde:"); para (WebElement e: tr .findElements (By.xpath (".// div [@ class = 'yW'] / *"))) {System.out.println ("" + e.getAttribute ("correo electrónico") + "," + e.getAttribute ("nombre") + "," + e.getText ()); } }
Ahora, busca el tema.
{/ * Asunto * / System.out.println ("Sub:" + tr.findElement (By.xpath (".// div [@ class = 'yNN']")). GetText ()); }
Y la fecha y hora del mensaje.
{/ * Fecha / Hora * / WebElement dt = tr.findElement (By.xpath ("./ td [8] / *")); System.out.println ("Fecha:" + dt.getAttribute ("título") + "," + dt.getText ()); }
Aquí está el número total de filas de correo electrónico en la página.
System.out.println (rows.size () + "mails.");
Y finalmente, terminamos, así que salimos del navegador.
driver.quit ();
En resumen, puede utilizar Selenium con Google Chrome para rastrear los sitios web que utilizan mucho javascript. Y con el Inspector de Google Chrome, es bastante fácil trabajar con el CSS o XPath necesario para extraer o interactuar con un elemento.
¿Tiene algún proyecto que se beneficie del uso de Selenium? ¿Y a qué problemas te enfrentas? Descríbalo en los comentarios a continuación.