<jupyter_start><jupyter_text>**Duración aproximada: 9 minutos**  Módulo 2: Scraping con Selenium LATAM AirlinesVamos a scrapear el sitio de Latam para averiguar datos de vuelos en funcion el origen y destino, fecha y cabina. La información que esperamos obtener de cada vuelo es:- Precio(s) disponibles- Horas de salida, de llegada y duración- Información de las escalas¡Empecemos!  Clase 10Utilicemos lo aprendido hasta ahora para lograr el objetivo propuesto<jupyter_code>import requests
from bs4 import BeautifulSoup
url = 'https://www.latam.com/es_ar/apps/personas/booking?fecha1_dia=25&fecha1_anomes=2019-10&fecha2_dia=12&fecha2_anomes=2019-11&from_city2=MAD&to_city2=BUE&auAvailability=1&ida_vuelta=ida_vuelta&vuelos_origen=Buenos%20Aires&from_city1=BUE&vuelos_destino=Madrid&to_city1=MAD&flex=1&vuelos_fecha_salida_ddmmaaaa=25/10/2019&vuelos_fecha_regreso_ddmmaaaa=12/11/2019&cabina=Y&nadults=1&nchildren=0&ninfants=0&cod_promo='
r = requests.get(url)
r.status_code
s = BeautifulSoup(r.text, 'lxml')
print(s.prettify())<jupyter_output><empty_output><jupyter_text>Vemos que la respuesta de la página no contiene la información que buscamos, ya que la misma aparece recién después de ejecutar el código JavaSCript que está en la respuesta.<jupyter_code>with open('latam.html', 'w') as f:
    f.write(r.text)
    f.close<jupyter_output><empty_output><jupyter_text>Selenium Selenium es una herramienta que nos permitirá controlar un navegador y podremos utilizar las funcionalidades del motor de JavaScript para cargar el contenido que no viene en el HTML de la página. Para esto necesitamos el módulo `webdriver`.<jupyter_code>from selenium import webdriver<jupyter_output><empty_output><jupyter_text>Paso 1: instanciar un **driver** del navegador<jupyter_code>driver = webdriver.Chrome(executable_path='../chromedriver')<jupyter_output><empty_output><jupyter_text>Paso 2: hacer que el navegador cargue la página web.<jupyter_code>driver.get(url)<jupyter_output><empty_output><jupyter_text>Paso 3: extraer la información de la página<jupyter_code>#<jupyter_output><empty_output><jupyter_text>Paso 4: cerrar el navegador<jupyter_code>driver.close()<jupyter_output><empty_output><jupyter_text>Esto me permitriá acceder a la página web en modo incógnito.<jupyter_code># Podemos agregarle opciones al driver para utilizar los distintos modos del Chrome
options = webdriver.ChromeOptions()
options.add_argument('--incognito')
driver = webdriver.Chrome(executable_path='../chromedriver', options=options)
driver.get(url)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.09144427001569859, 'fraction_numerical': 0.02197802197802198, 'mean_word_length': 8.371323529411764, 'pattern_counts': {'":': 0, '<': 33, '<?xml version=': 0, '>': 33, 'https://': 1, 'lorem ipsum': 0, 'www.': 1, 'xml': 1}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '8', 'dir': 'jupyter-structured-clean-dedup', 'id': '80714', 'license': 'MIT', 'n_tokens_mistral': 1007, 'n_tokens_neox': 954, 'n_words': 210, 'path': 'NoteBooks/Curso de WebScraping/Unificado/web-scraping-master/Clases/Módulo 3_ Scraping con Selenium/M3C1. Intro a Selenium - Script.ipynb', 'repo_name': 'Alejandro-sin/Learning_Notebooks', 'size': '2548'}