🔥🔥🔥🔥 ¿Quieres aprender TODO sobre Web Scraping? Inscríbete en mi curso maestro de extracción de datos: www.udemy.com/course/curso-maestro-web-scraping/?referralCode=1BA4AD4AD4BED138A583 📝 Código: github.com/lkuffo/leonardo-youtube/tree/master/Web%20Scraping CONTENIDO 00:00: Que es Web Scraping 00:30: El problema con Scrapy 01:48: Que es Selenium 02:24: Instalar Selenium en Python 03:20: Instalar el driver de Selenium de Google Chrome 06:11: INICIO DE PRACTICA 07:12: Abrir el driver de Google Chrome 07:55: Abrir una página en Selenium 09:15: Como hallar la información que quiero extraer del DOM 13:40: Recorrer listas de elementos del DOM 18:50: Dar click al botón que carga mas anuncios 21:04: Cómo esperar por la carga de nueva información. 23:30: Cómo cargar información de manera iterativa. 25:30: Manejando errores en Selenium 27:30: Resultado final del script 29:10: Final
hola una pregunta, es recomendable usar selenium en producción? sino es recomendable, cual me recomiendas para usar con python en producción? gracias por tu atención
El video y la explicacion es genial! Sigue así, muchas gracias!!. Tambien deberias considerar hacer uno con datos que se vayan cambiando constantemente y sacar el dato a tiempo real.
al fin alguien que sabe enseñar a un lerdo como yo...MUCHAS GRACIAS!!! me apuntare a tu curso porque quiero lograr extraer también las imégenes y poder pasarlo todo a una csv para subir cosas a mi web
Buen vídeo, muchas gracias. Quizás faltó mencionar que Selenium trae sus propias soluciones para esos tiempos de espera y esperas condicionales: las esperas implícitas y explícitas. Saludos!
Que brillante eres amigo, super inteligente y compartes toda la info como es. Super interesante y facil que se ve selenium comparado con scrapy y urlib, aun no puedo empezar con selenium porque debo seguir practicando scrapy y poder dominarlo o al menos tener un buen conocimiento de scrapy.
Hola Angel, Me alegro que te haya gustado el video! Te invito a echar un vistazo a mi curso maestro de Web Scraping donde podrás indagar mucho más y aprender absolutamente todo sobre extracción de datos: www.udemy.com/course/curso-maestro-web-scraping/?referralCode=1BA4AD4AD4BED138A583
Buena tarde Leonardo, este tutorial esta muy bien explicado te felicito, gracias por compartir tu conocimiento sobre el tema. Ahora que trato de poner en practica este ejercicio (Oct-2022) el método CLICK() no funciona he leído y al parecer SELENIUM cambió la metodología de los clic, sabes como se puede corregir este incidente?. Le estaría muy agradecido. Bendiciones.
Hola Muy completo tu video. Quería preguntar comompoder hacerlo mismo pero en vez de un click aún botón, re correr toda la página con scroll down. Saludos
Hola, excelente video te felicito, dentro del mismo ejemplo, podrías ingresar a cada anuncio y extraer por ejemplo el telefono de contacto? me imagino que si se puede pero que tan complejo se vuelve el proceso
Consulta, si la página estuviese mal diseñada y quisiera acceder a los enlaces de cada fila de uno de los tantos , y no puedo usar xpath relativo, sólo xpath absoluto. Sería una alternativa ejecutar con selenium un .js que lo modifique con jquery y me resulte más fácil manipular? Gracias
excelente video... ahora me dio por tratar de automatizar la toma de los contadores de mis impresoras....xDD (por lo menos ya pude sacar info de la pagina inicial... )
Hola amigo, me puedes ayudar? tal vez es una pregunta muy obvia pero soy nuevo en esto. necesito traer el numero de coincidencias de un css y asi mismo crear una accion esa misma cantidad de veces... no se si me explico, espero puedas ayudarme...
Muchas gracias por el video. Me interesa saber si hay alguna forma de scrapear un sitio que en lugar de un botón de "ver más" tiene un botón de "siguiente" similar al de Google, que al apretarlo cambia todo como si fuera una nueva página. El problema es que la carga es dinámica y la URL se mantiene exactamente igual al cambiar de página, por lo que no sé cómo solucionarlo.
Hola Leonardo, me gustaría saber si hizo un video con lo que menciono al final de este video?, sobre dar click en la informacion de los anuncios para sacar informacion y luego volver
Hola! Gracias! Te comento que tengo un curso maestro de extracción de datos de la web, en donde podrás aprender muchísimas más herramientas con mucho mayor detalle para hacer Web Scraping. Te comparto un link para que veas mas info si te interesa: www.udemy.com/course/curso-maestro-web-scraping/?referralCode=1BA4AD4AD4BED138A583 Un saludo!
Hola, Leonardo Kuffo, muchas gracias por excelente video explicativo a cerca del web scraping. Tengo una consulta: cómo resolvemos cuando en vez de un botón que cambia páginas; se tiene un captcha que deben resolverse operaciones matemáticas(+/-*/división) para concretar cotizaciones en una página donde se intenta hacer scraping.
Lamentablemente los captchas son una gran limitante del Web Scraping. Necesitarás contratar un servicio solucionador de captchas (como este: 2captcha.com/). Que son pagados :(. En su defecto puedes parar el código cuando detectes un captcha, resolver manualmente el captcha y una vez resuelto, continuas la ejecución del código. Suena engorroso pero lamentablemente es la única opción. Te comento que pronto lanzaré un curso completo sobre Web Scraping donde, entre muchas cosas, explicaré cómo resolver Captchas utilizando Selenium en conjunto con estos servicios pagados solucionadores de captchas. Si te interesa puedes pre-inscribirte aquí: forms.gle/h4LqRXRfC8W5Rs8D6
Hola Hector. Gracias por tu comentario! Te comento que acabé de lanzar un curso maestro donde podras aprender TODO sobre Web Scraping. Te puedes inscribir y ver más información entrando en el siguiente link: www.udemy.com/course/curso-maestro-web-scraping/?referralCode=1BA4AD4AD4BED138A583
Muchas gracias por el video, está muy bueno. Tengo una consulta: Quiero controlar con python una pagina web donde hago recargas de saldo de celulares. El problema es que cuando hago click al boton "Cargar" me salta un diálogo de confirmacion y no sé como acceder a ese diálogo para darle al boton de "Confirmar". Cómo se podría hacer con Selenium? Gracias.
Hola Leonardo, estoy interesado en que me automatices un scrap para extraer productos y otras infos de una pagina web dinamica (angular), y crear un archivo en csv para importarlo a woocomerce. Seria posible? Asi te contacto.
Hola Leonardo, Antes que nada una felicitación y agradecimiento por tus vídeos. en el minuto 12:45 del vídeo extraes el xpath a partir del "li", tengo una pagina en donde dice '>div class "grid-item__eaXVb" data-index="0" data-grid-id="XXX" y no logro ubicar el atributo para inmcorporarlo a la ruta, me podrías orientar. Gracias de antemano
Hola Sergio, Para esto podrías utilizar un XPATH más sofisticado como el siguiente: //div[contains(@class, "grid-item")] O en todo caso, todo depende si son elementos únicos o no dentro de la página también podrías utilizar este: //div[@data-grid-id="XXX"] Tengo un video enteramente dedicado para aprender XPATH: ruclips.net/video/0O1SyTh8Zxo/видео.html Te invito también a que le eches un vistazo a mi curso maestro de Web Scraping, en donde podrás aprender absolutamente todo sobre extracción de datos en la web: www.udemy.com/course/curso-maestro-web-scraping/?referralCode=1BA4AD4AD4BED138A583
Hola David. Gracias por tu comentario! Te comento que acabé de lanzar un curso maestro donde podrás aprender TODO sobre Web Scraping. Te puedes inscribir y ver más información entrando en el siguiente link: www.udemy.com/course/curso-maestro-web-scraping/?referralCode=1BA4AD4AD4BED138A583
Hola, puedes leer una lista de datos por ejemplo user y password des un excel, y hacer que selenium lea una la ingrese luego lea la otra la ingrese, saque el resultado y lo guarde o imprima y luego continue con el siguiente par?(lo hice, pero solo me resulta para un set de datos, cuando aplico el for, lee toda la lista y trata de meter toda la lista en el sitio web)
Buenas tardes profe, cómo hago para descagar imagenes?. estaba probando con está linea de code, imagen=auto.find_element_by_xpath('.//span[@data-aut-id="itemImage"]'). pero me dio este error: NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":".//span[@data-aut-id="itemImage"]"} (Session info: chrome=91.0.4472.77). Gracias por la ayuda.
Necesito ayuda para hacer un programa de compra automaticas. He visto todas tus videos. Que me recomiendas? Cada vez voy entendiendo mas pero necesito mas informacion. Me podrias orientar?
Hola Felipe. Con lo que me comentas, tu programa puede abarcar muchas cosas. Tal vez si eres un poco más específico podría guiarte por un mejor camino ya que no encuentro cual es la relación de las compras automáticas con el Web Scraping. Espero tu respuesta para poder ayudarte! De todos modos te comento que acabé de lanzar un curso maestro donde podrás aprender TODO sobre Web Scraping. Te puedes inscribir y ver más información entrando en el siguiente link: www.udemy.com/course/curso-maestro-web-scraping/?referralCode=1BA4AD4AD4BED138A583
Buen día Leonardo, una consulta traté de crear un ejecutable para empaquetarlo con pyinstaller, pero al parecer no funciona, tu has tratado de empaquetarlo a un .exe, tal vez el chromedriver no lo puede empaquetar o mi entorno anaconda tal vez no exporta las librerias necesarias. Para simplemente darle un click al archivo exe y listo.
Excelente video Leonardo, una pregunta, ¿A partir de un Item con 2 precios (es decir en rebaja) se puede crear un porcentaje referente a ese Item? Regularmente aparecen como Ej. Impresora ̶$̶1̶0̶0̶0̶ ahora esta a $500.00 por lo tanto es de 50% de descuento
Hola Antonio, Claro que sí. En este caso tendrías que obtener ambos precios, y utilizar procesamiento de texto para convertir estos texto en números y finalmente sacar el porcentaje. En breves rasgos sería algo parecido a esto: precioOriginal = driver.get_element_by_xpath("//div/span/etc") precioDescuento = driver.get_element_by_xpath("//div/span/etc") precioOriginal = float(precioOriginal.replace("$", "").replace(".", "")) precioDescuento = float(precioDescuento.replace("$", "").replace(".", "")) descuento = precioDescuento / precioOriginal * 100 Te invito también a que le eches un vistazo a mi curso maestro de Web Scraping, en donde podrás aprender absolutamente todo sobre extracción de datos en la web: www.udemy.com/course/curso-maestro-web-scraping/?referralCode=1BA4AD4AD4BED138A583
Gracias Michael, me alegro que te haya gustado. Por cierto, te comento que tengo un curso maestro de extracción de datos de la web, en donde podrás aprender muchísimas más herramientas con mucho mayor detalle para hacer Web Scraping. Te comparto un link para que veas mas info si te interesa: www.udemy.com/course/curso-maestro-web-scraping/?referralCode=1BA4AD4AD4BED138A583
El vídeo y la explicación fueron excelentes! Una pregunta, como podría utilizarlo para acceder a una paginacion y luego de acceder a ella, acceder a una sub-paginacion, es decir la primer paginacion esta dada de manera A, B, C, ... Z, y dentro de ella estan Aa, Ab, Ac, ... Az?, ademas de esto, como podria hacer que me entregue cada cierto tiempo una cantidad de elementos para que no me baneen la IP. Muchas gracias Leonardo Kuffo.
Hola Jhoan! Te recomiendo que para estos tipos de extracciones con paginación (más aún con paginación a 2 niveles de profundidad como lo explicas), intentes utilizar Scrapy. Ya que Selenium es bastante lento cuando se quiere extraer datos de varias páginas con paginación. Actualmente tengo un video donde enseño a realizar paginación con esta herramienta Scrapy que te menciono: ruclips.net/video/wHktvpgKX5k/видео.html A partir de este video la paginación a 2 niveles como mencionas, es simplemente añadir más reglas al CrawlSpider. Y para protegerte de los baneos de tu IP, como mínimo recomiendo configurar las siguientes variables: a) El "user_agent"para enmascarar tus requerimientos como que fueras un navegador. b) El "download_delay" para poner un tiempo de espera entre cada requerimiento. Y c) El "CLOSESPIDER_PAGECOUNT", para limitar el número de items por cada extracción Ahora, si deseas utilizar Selenium, o si la carga de datos es dinámica y no tienes otra alternativa..., es un poco complicado de explicar en un comentario. Pero lo intentare: PASO 1) Identificar como paginar sobre A, B, C, D, etc ==> Si tu paginación tiene un botón de "Siguiente" (así como en mercado libre). Puedes ir a las siguientes páginas dando click en dicho botón. Y asi vas recorriendo cada página del listado hasta la última. Si no tienes un botón de "Siguiente", debes extraer los URLs de los numeritos de las páginas, los guardas en una lista, y los vas iterando. for url in urls: driver.get(url) PASO 2) Por cada página que visitamos de (ej. A). Tienes que identificar como paginar sobre Aa, Ab, Ac. De nuevo, si no tienes un botón de "Siguiente". Tienes que extraer todas las URLs que te llevan a las páginas Aa, Ab, Ac, etc., los guardas en una lista, y lis vas iteranto for sub_url in sub_urls: driver.get(sub_url). PASO 3) Finalmente, cuando ya estes en la página que contiene la información que quieres extraer. Extraes la data. Y haces: driver.back(), para que el driver vuelva a la página anterior (que debería ser alguna de las: (Aa, Ab, Ac). Para poder dirigirte a la siguiente. PASO 4) Cuando terminas con todas las Aa, Ab, Ac, tienes que hacer de nuevo driver.back(), para volver a la paginación principal: A, B, C. Para poder dirigirte a la siguiente. Y vuelves al PASO 2 Si, suena complejo al explicarlo solo en un comentario, pero en la práctica no es tan complejo como suena :( En aproximadamente 1 semana lanzaré mi curso maestro online de Extracción de datos de la web, donde, entre tantos temas que voy a topar, enseño como hacer paginación a dos niveles (tu problema) en ambas herramientas: Scrapy y Selenium, y hago ejemplos de como resolverlo. Si te interesa saber más pre-inscríbete aquí: forms.gle/yhjMbmEPscdo5KhW8
hola Leonardo, muy buen tutorial, sin embargo, no me imprime los datos de precio y descripcion sino que me despliega una lista de sesiones comenzadas por [
Lo más probable es que te haya faltado el ".text" para extraer el texto del elemento. Si quieres aprender mucho más en detalle sobre Selenium y otras herramientas para el Web Scraping no dudes en checar mi curso online de Web Scraping con más de 13 horas de contenido. Te dejo un link para que lo puedas adquirir al precio más bajo en tu moneda local: www.udemy.com/course/curso-maestro-web-scraping/?couponCode=NUEVENOVENTAYNUEVE
Hola! Mete los datos en una lista de diccionarios que quede así: d = [ {'nombre': 'CARRO 1', 'precio': 398}, {'nombre': 'CARRO 2', 'precio': 999} ... ETC ... ] Para esto crea la lista vacia: d = [ ] Y luego empiezas a añadir los diccionarios a la lista dentro del for: d.append( {'nombre': titulo, 'precio': precio} ) Luego haces: import pandas as pd pd.DataFrame(d) Por cierto, pronto lanzaré un curso completo sobre Web Scraping. Si te interesa puedes pre-inscribirte aquí: forms.gle/h4LqRXRfC8W5Rs8D6
¡Hola! Para descargar imágenes tienes que utilizar otra librería llamada Pillow. Puedes encontrar referencias de como hacer esto utilizando Selenium y esta librería Pillow aquí en la sección 3 de este artículo: towardsdatascience.com/image-scraping-with-python-a96feda8af2d Te haré un resumen. Se hace un requerimiento a la URL de la imágen que tienes que extraer con Selenium de la página web. Usualmente está en el atributo "src" de la imagen. Luego haces un requerimiento get con la librería requests a esta imágen. Y con la librería io, y Pillow te descargas la imagen en tu computadora. import requests from PIL import Image import io url = "url.de.la.imagen" image_content = requests.get(url).content image_file = io.BytesIO(image_content) image = Image.open(image_file).convert('RGB') file_path = 'imagen1.jpg' # nombre a guardar de la imagen with open(file_path, 'wb') as f: image.save(f, "JPEG", quality=85)
Hola Gabriel. Te comento que acabé de lanzar un curso maestro donde podrás aprender TODO sobre Web Scraping, incluyendo la extracción de imágenes de un sitio web. Te puedes inscribir y ver más información entrando en el siguiente link: www.udemy.com/course/curso-maestro-web-scraping/?referralCode=1BA4AD4AD4BED138A583
bro excelente video... pero sabes porque la ventana de chrome se me cierra automaticamente apenas se completa la carga de la pagina, sabes que podria ser?
Me pasaba que no cargaba los datos. Es porque mi internet es un poco lento. Para ello puse un intervalo de tiempo de 10 segundos para que la pagina cargue bien. import time y luego de la linea give.get pongo time.sleep(10). Problema resuelto. Espero haber ayudado.
Hola Jorge. Muchas gracias! Pues sí, al parecer en realidad creo que la página ha cambiado un poco y el botón como tal, carga de forma dinámica un poco luego de que la página ha terminado su carga inicial. Por cierto, te comento que tengo un curso maestro de extracción de datos de la web, en donde podrás aprender muchísimas más herramientas con mucho mayor detalle para hacer Web Scraping. Te comparto un link para que veas mas info si te interesa: www.udemy.com/course/curso-maestro-web-scraping/?referralCode=1BA4AD4AD4BED138A583 Gracias de nuevo! Un saludo
amigo muy buen video, pero me sale este error al ejecutarlo :( DevTools listening on ws://127.0.0.1:58210/devtools/browser/30324809-08a3-47f9-a170-7b96d4fdd037 [536:15260:0103/165824.006:ERROR:device_event_log_impl.cc(211)] [16:58:24.004] USB: usb_device_handle_win.cc:1020 Failed to read descriptor from node connection: Uno de los dispositivos conectados al sistema no funciona. (0x1F)
@Leonardo Kuffo, nos ayudarías con esta duda, por favor, Intente instalando el webdriver manager pero sucede el mismo error :( ... Gracias por compartir tu conocimiento !
Hola Dainer, ¿Que problema estás teniendo en específico? Esa versión si se encuentra soportada dentro de las versiones actuales de Selenium WebDriver: sites.google.com/a/chromium.org/chromedriver/downloads
Hola Leonardo! Oye el codigo da un error, incluso copiado directo, y revise la pagina y no ha sufrido cambios en su estructura. Este es el error. selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//button[@data-aut-id="btnLoadMore"]"} Saludos
Hola Juan. La carga del botón que obtenemos en la línea 9 se ha convertido en dinámica luego de que carga la página. Por lo que en la línea 8 tenemos que agregar un sleep(3), para poder obtener el botón sin problemas.
A mi me aparece este error [8632:15932:0726/195113.868:ERROR:device_event_log_impl.cc(208)] [19:51:13.868] Bluetooth: bluetooth_adapter_winrt.cc:1074 Getting Default Adapter failed. :(
Hola Carlos, Podrías intentar actualizando Google Chrome? Y por ende, descárgate la versión correspondiente al WebDriver de la nueva versión que instalaste Me avisas como te va
buenas, excelente video y canal!! pero en mi caso no lo pude lograr ya que me da error al colocar .text: File "c:\Users\Usuario\Desktop\Programación\alquiler.py", line 67, in aptos_cv = driver.find_elements_by_xpath('//li[@class="ui-search-layout__item"]').text AttributeError: 'list' object has no attribute 'text' También al colocar .find_elements_by_xpath luego de la variable dentro del for, no me la marca en color, al parecer no la reconoce. He probado de todo. Espero alguien me pueda ayudar, saludos y muchas gracias!!
No entiendo tu forma de escribir xpath... todos los navegadores tienen extractor de xpath integrado, pero tu se basas en copiar el codigo desde imagino un papel o otra pantalla y resulta desesperante tener que aprender python + selenium + xpath cuando una parte te la puedes saltar usando el codigo que devuelve chrome... pero tu la has creado anteriormente
A largo plazo no es recomendable utilizar el extractor xpath del navegador, dado que esas expresiones tienen ALTO acoplamiento y con cualquier minimo cambio que hagan los devs, te dejan de funcionar.
Si los siguientes métodos no funcionan: find_elements_by_xpath() find_element_by_xpath() puedes usar las siguientes: find_elements("xpath", '//li[@data-aut-id="itemBox"]') precio = moto.find_element("xpath", './/span[@data-aut-id="itemPrice"]').text
🔥🔥🔥🔥 ¿Quieres aprender TODO sobre Web Scraping? Inscríbete en mi curso maestro de extracción de datos: www.udemy.com/course/curso-maestro-web-scraping/?referralCode=1BA4AD4AD4BED138A583
📝 Código: github.com/lkuffo/leonardo-youtube/tree/master/Web%20Scraping
CONTENIDO
00:00: Que es Web Scraping
00:30: El problema con Scrapy
01:48: Que es Selenium
02:24: Instalar Selenium en Python
03:20: Instalar el driver de Selenium de Google Chrome
06:11: INICIO DE PRACTICA
07:12: Abrir el driver de Google Chrome
07:55: Abrir una página en Selenium
09:15: Como hallar la información que quiero extraer del DOM
13:40: Recorrer listas de elementos del DOM
18:50: Dar click al botón que carga mas anuncios
21:04: Cómo esperar por la carga de nueva información.
23:30: Cómo cargar información de manera iterativa.
25:30: Manejando errores en Selenium
27:30: Resultado final del script
29:10: Final
hola una pregunta, es recomendable usar selenium en producción? sino es recomendable, cual me recomiendas para usar con python en producción? gracias por tu atención
Hola. Podrías ser un poco más específico para poder guiarte de mejor manera? Específicamente que deseas realizar en producción?
Buenas noches, en este curso también se vería el tema de selenium?
El video y la explicacion es genial! Sigue así, muchas gracias!!. Tambien deberias considerar hacer uno con datos que se vayan cambiando constantemente y sacar el dato a tiempo real.
al fin alguien que sabe enseñar a un lerdo como yo...MUCHAS GRACIAS!!! me apuntare a tu curso porque quiero lograr extraer también las imégenes y poder pasarlo todo a una csv para subir cosas a mi web
muy bien explicado, me ayudaste mucho para un trabajo, pude solucionar un problema con el que llevaba meses en media hora
Buen vídeo, muchas gracias. Quizás faltó mencionar que Selenium trae sus propias soluciones para esos tiempos de espera y esperas condicionales: las esperas implícitas y explícitas. Saludos!
tipo callbacks?
@@krishcm3016 selenium-python.readthedocs.io/api.html
busca por: implicitly_wait
Que brillante eres amigo, super inteligente y compartes toda la info como es.
Super interesante y facil que se ve selenium comparado con scrapy y urlib, aun no puedo empezar con selenium porque debo seguir practicando scrapy y poder dominarlo o al menos tener un buen conocimiento de scrapy.
Muy buen video, entendible todo, tienes vocación para la enseñanza, sigue así :)
Woow, excelente video!!! muy claro!!
Hola Angel,
Me alegro que te haya gustado el video!
Te invito a echar un vistazo a mi curso maestro de Web Scraping donde podrás indagar mucho más y aprender absolutamente todo sobre extracción de datos: www.udemy.com/course/curso-maestro-web-scraping/?referralCode=1BA4AD4AD4BED138A583
Gracias.Justo lo que necesita.Te amo :)
Buena tarde Leonardo, este tutorial esta muy bien explicado te felicito, gracias por compartir tu conocimiento sobre el tema. Ahora que trato de poner en practica este ejercicio (Oct-2022) el método CLICK() no funciona he leído y al parecer SELENIUM cambió la metodología de los clic, sabes como se puede corregir este incidente?. Le estaría muy agradecido. Bendiciones.
Muy buen video.!! Deberia hacer un curso de pago, Yo estaria dispuesto a pagarlo.
¡Hola Francis! Estoy preparando un curso completo de Web Scraping. Pre-inscríbete aquí: forms.gle/H16dZbiKf4ZptkBx6
Vamos a probar saludos desde Costa Rica Pura Vida
Hola
Muy completo tu video. Quería preguntar comompoder hacerlo mismo pero en vez de un click aún botón, re correr toda la página con scroll down.
Saludos
Gracias Leonardo, muy bien explicado, el código funciono de maravilla, Saludos
explicas muy bien, gracias.
Muy buena data!!!! Una consulta, como puedo entrar en un input de un ?
Excelente contenido Leonardo!! No soy de comentar videos, pero la verdad que muy bueno! Y además acabo de comprar tu curso de udemy!
Hola, excelente video te felicito, dentro del mismo ejemplo, podrías ingresar a cada anuncio y extraer por ejemplo el telefono de contacto? me imagino que si se puede pero que tan complejo se vuelve el proceso
Consulta, si la página estuviese mal diseñada y quisiera acceder a los enlaces de cada fila de uno de los tantos , y no puedo usar xpath relativo, sólo xpath absoluto. Sería una alternativa ejecutar con selenium un .js que lo modifique con jquery y me resulte más fácil manipular? Gracias
Suscriptora nueva! Explicas muy bien y se nota que lo dominas! 🤓
Muy bueno. Gracias por compartir
excelente video... ahora me dio por tratar de automatizar la toma de los contadores de mis impresoras....xDD (por lo menos ya pude sacar info de la pagina inicial... )
Hola amigo, me puedes ayudar? tal vez es una pregunta muy obvia pero soy nuevo en esto.
necesito traer el numero de coincidencias de un css y asi mismo crear una accion esa misma cantidad de veces...
no se si me explico, espero puedas ayudarme...
¡Excelente! ¡Muchísimas gracias por el tutorial!
Muchas gracias por el video. Me interesa saber si hay alguna forma de scrapear un sitio que en lugar de un botón de "ver más" tiene un botón de "siguiente" similar al de Google, que al apretarlo cambia todo como si fuera una nueva página. El problema es que la carga es dinámica y la URL se mantiene exactamente igual al cambiar de página, por lo que no sé cómo solucionarlo.
Hola Leonardo, me gustaría saber si hizo un video con lo que menciono al final de este video?, sobre dar click en la informacion de los anuncios para sacar informacion y luego volver
Muy bien hecho el video. Gracias Leo.
Hola!
Gracias!
Te comento que tengo un curso maestro de extracción de datos de la web, en donde podrás aprender muchísimas más herramientas con mucho mayor detalle para hacer Web Scraping. Te comparto un link para que veas mas info si te interesa: www.udemy.com/course/curso-maestro-web-scraping/?referralCode=1BA4AD4AD4BED138A583
Un saludo!
Muy buen video colega
Fenomenal, muy bueno, gracias!
Hola, Leonardo Kuffo, muchas gracias por excelente video explicativo a cerca del web scraping. Tengo una consulta: cómo resolvemos cuando en vez de un botón que cambia páginas; se tiene un captcha que deben resolverse operaciones matemáticas(+/-*/división) para concretar cotizaciones en una página donde se intenta hacer scraping.
Lamentablemente los captchas son una gran limitante del Web Scraping. Necesitarás contratar un servicio solucionador de captchas (como este: 2captcha.com/). Que son pagados :(. En su defecto puedes parar el código cuando detectes un captcha, resolver manualmente el captcha y una vez resuelto, continuas la ejecución del código. Suena engorroso pero lamentablemente es la única opción.
Te comento que pronto lanzaré un curso completo sobre Web Scraping donde, entre muchas cosas, explicaré cómo resolver Captchas utilizando Selenium en conjunto con estos servicios pagados solucionadores de captchas. Si te interesa puedes pre-inscribirte aquí: forms.gle/h4LqRXRfC8W5Rs8D6
@@LeonardoKuffo valiosa info gracias
Se agradece, Master. SALUD!!!
Gracias por compartir ....
Excelente el video. Te quería consultar si Selenium se puede usar en Instagram.
Buenas Leo!, está muy bien explicado tus videos!. Ahora me preguntaba si tienes algún video de usar Selenium con condiciones?
Excelente..... Gracias por enseñar...
Hola Hector. Gracias por tu comentario! Te comento que acabé de lanzar un curso maestro donde podras aprender TODO sobre Web Scraping. Te puedes inscribir y ver más información entrando en el siguiente link: www.udemy.com/course/curso-maestro-web-scraping/?referralCode=1BA4AD4AD4BED138A583
@@LeonardoKuffo Gracias yo ya lo compré, es el mejor en ese tema.....
Excelente video! totalmente entendible :D me suscribo
muy buen video, excelente.
hola se puede hacer con PHP y qué sevidor y estructura necesita si lo quiero tener en un vps?
Buenísimo!!
Muchas gracias por el video, está muy bueno. Tengo una consulta: Quiero controlar con python una pagina web donde hago recargas de saldo de celulares. El problema es que cuando hago click al boton "Cargar" me salta un diálogo de confirmacion y no sé como acceder a ese diálogo para darle al boton de "Confirmar". Cómo se podría hacer con Selenium? Gracias.
Excelente video hermano!! una consulta, como sería para instalarlo en un servidor de linux? Se puede?
Hola Leonardo, estoy interesado en que me automatices un scrap para extraer productos y otras infos de una pagina web dinamica (angular), y crear un archivo en csv para importarlo a woocomerce. Seria posible? Asi te contacto.
Excelente video! Como haces que te de las recomendaciones de selenium? Usas una extension?
Hola Miguel. Gracias por tu comentario. Creo que no entiendo muy bien tu pregunta o duda. Podrías detallar más la pregunta?
Osea que selenium sirve más para páginas dinámicas y scrapy para Multiples Páginas?
Hola Leonardo, Antes que nada una felicitación y agradecimiento por tus vídeos. en el minuto 12:45 del vídeo extraes el xpath a partir del "li", tengo una pagina en donde dice '>div class "grid-item__eaXVb" data-index="0" data-grid-id="XXX" y no logro ubicar el atributo para inmcorporarlo a la ruta, me podrías orientar. Gracias de antemano
Hola Sergio,
Para esto podrías utilizar un XPATH más sofisticado como el siguiente:
//div[contains(@class, "grid-item")]
O en todo caso, todo depende si son elementos únicos o no dentro de la página también podrías utilizar este:
//div[@data-grid-id="XXX"]
Tengo un video enteramente dedicado para aprender XPATH: ruclips.net/video/0O1SyTh8Zxo/видео.html
Te invito también a que le eches un vistazo a mi curso maestro de Web Scraping, en donde podrás aprender absolutamente todo sobre extracción de datos en la web: www.udemy.com/course/curso-maestro-web-scraping/?referralCode=1BA4AD4AD4BED138A583
brooo, excelentes videos, sigue asi
Hola David. Gracias por tu comentario! Te comento que acabé de lanzar un curso maestro donde podrás aprender TODO sobre Web Scraping. Te puedes inscribir y ver más información entrando en el siguiente link: www.udemy.com/course/curso-maestro-web-scraping/?referralCode=1BA4AD4AD4BED138A583
Muy bueno!!
Hola, puedes leer una lista de datos por ejemplo user y password des un excel, y hacer que selenium lea una la ingrese luego lea la otra la ingrese, saque el resultado y lo guarde o imprima y luego continue con el siguiente par?(lo hice, pero solo me resulta para un set de datos, cuando aplico el for, lee toda la lista y trata de meter toda la lista en el sitio web)
Hola, que ya la funcion find_elemet_by_xpath() esta deprecated o estoy mal 🤔
Buenas tardes profe, cómo hago para descagar imagenes?. estaba probando con está linea de code, imagen=auto.find_element_by_xpath('.//span[@data-aut-id="itemImage"]'). pero me dio este error: NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":".//span[@data-aut-id="itemImage"]"}
(Session info: chrome=91.0.4472.77). Gracias por la ayuda.
Necesito ayuda para hacer un programa de compra automaticas. He visto todas tus videos. Que me recomiendas? Cada vez voy entendiendo mas pero necesito mas informacion. Me podrias orientar?
Hola Felipe. Con lo que me comentas, tu programa puede abarcar muchas cosas. Tal vez si eres un poco más específico podría guiarte por un mejor camino ya que no encuentro cual es la relación de las compras automáticas con el Web Scraping. Espero tu respuesta para poder ayudarte!
De todos modos te comento que acabé de lanzar un curso maestro donde podrás aprender TODO sobre Web Scraping. Te puedes inscribir y ver más información entrando en el siguiente link: www.udemy.com/course/curso-maestro-web-scraping/?referralCode=1BA4AD4AD4BED138A583
1 año tarde, pero te informo que lo correcto sería usar pyAutogui
Maquina
Bien
Buen día Leonardo, una consulta traté de crear un ejecutable para empaquetarlo con pyinstaller, pero al parecer no funciona, tu has tratado de empaquetarlo a un .exe, tal vez el chromedriver no lo puede empaquetar o mi entorno anaconda tal vez no exporta las librerias necesarias. Para simplemente darle un click al archivo exe y listo.
Hola Arnold, no. Nunca he intentado hacer un ejecutable de Selenium. Desconozco si todo funcionaría de manera correcta.
Excelente video Leonardo, una pregunta, ¿A partir de un Item con 2 precios (es decir en rebaja) se puede crear un porcentaje referente a ese Item? Regularmente aparecen como Ej. Impresora ̶$̶1̶0̶0̶0̶ ahora esta a $500.00 por lo tanto es de 50% de descuento
Hola Antonio,
Claro que sí. En este caso tendrías que obtener ambos precios, y utilizar procesamiento de texto para convertir estos texto en números y finalmente sacar el porcentaje.
En breves rasgos sería algo parecido a esto:
precioOriginal = driver.get_element_by_xpath("//div/span/etc")
precioDescuento = driver.get_element_by_xpath("//div/span/etc")
precioOriginal = float(precioOriginal.replace("$", "").replace(".", ""))
precioDescuento = float(precioDescuento.replace("$", "").replace(".", ""))
descuento = precioDescuento / precioOriginal * 100
Te invito también a que le eches un vistazo a mi curso maestro de Web Scraping, en donde podrás aprender absolutamente todo sobre extracción de datos en la web: www.udemy.com/course/curso-maestro-web-scraping/?referralCode=1BA4AD4AD4BED138A583
👍 buen video
Gracias Michael, me alegro que te haya gustado.
Por cierto, te comento que tengo un curso maestro de extracción de datos de la web, en donde podrás aprender muchísimas más herramientas con mucho mayor detalle para hacer Web Scraping. Te comparto un link para que veas mas info si te interesa: www.udemy.com/course/curso-maestro-web-scraping/?referralCode=1BA4AD4AD4BED138A583
Leonardo Kuffo ya lo tome. Recomendado.
Esto se puede hacer con una busqueda de google maps?
El vídeo y la explicación fueron excelentes! Una pregunta, como podría utilizarlo para acceder a una paginacion y luego de acceder a ella, acceder a una sub-paginacion, es decir la primer paginacion esta dada de manera A, B, C, ... Z, y dentro de ella estan Aa, Ab, Ac, ... Az?, ademas de esto, como podria hacer que me entregue cada cierto tiempo una cantidad de elementos para que no me baneen la IP. Muchas gracias Leonardo Kuffo.
Hola Jhoan!
Te recomiendo que para estos tipos de extracciones con paginación (más aún con paginación a 2 niveles de profundidad como lo explicas), intentes utilizar Scrapy. Ya que Selenium es bastante lento cuando se quiere extraer datos de varias páginas con paginación.
Actualmente tengo un video donde enseño a realizar paginación con esta herramienta Scrapy que te menciono: ruclips.net/video/wHktvpgKX5k/видео.html
A partir de este video la paginación a 2 niveles como mencionas, es simplemente añadir más reglas al CrawlSpider. Y para protegerte de los baneos de tu IP, como mínimo recomiendo configurar las siguientes variables:
a) El "user_agent"para enmascarar tus requerimientos como que fueras un navegador.
b) El "download_delay" para poner un tiempo de espera entre cada requerimiento. Y
c) El "CLOSESPIDER_PAGECOUNT", para limitar el número de items por cada extracción
Ahora, si deseas utilizar Selenium, o si la carga de datos es dinámica y no tienes otra alternativa..., es un poco complicado de explicar en un comentario. Pero lo intentare:
PASO 1) Identificar como paginar sobre A, B, C, D, etc ==> Si tu paginación tiene un botón de "Siguiente" (así como en mercado libre). Puedes ir a las siguientes páginas dando click en dicho botón. Y asi vas recorriendo cada página del listado hasta la última. Si no tienes un botón de "Siguiente", debes extraer los URLs de los numeritos de las páginas, los guardas en una lista, y los vas iterando.
for url in urls:
driver.get(url)
PASO 2) Por cada página que visitamos de (ej. A). Tienes que identificar como paginar sobre Aa, Ab, Ac. De nuevo, si no tienes un botón de "Siguiente". Tienes que extraer todas las URLs que te llevan a las páginas Aa, Ab, Ac, etc., los guardas en una lista, y lis vas iteranto
for sub_url in sub_urls:
driver.get(sub_url).
PASO 3) Finalmente, cuando ya estes en la página que contiene la información que quieres extraer. Extraes la data. Y haces: driver.back(), para que el driver vuelva a la página anterior (que debería ser alguna de las: (Aa, Ab, Ac). Para poder dirigirte a la siguiente.
PASO 4) Cuando terminas con todas las Aa, Ab, Ac, tienes que hacer de nuevo driver.back(), para volver a la paginación principal: A, B, C. Para poder dirigirte a la siguiente. Y vuelves al PASO 2
Si, suena complejo al explicarlo solo en un comentario, pero en la práctica no es tan complejo como suena :(
En aproximadamente 1 semana lanzaré mi curso maestro online de Extracción de datos de la web, donde, entre tantos temas que voy a topar, enseño como hacer paginación a dos niveles (tu problema) en ambas herramientas: Scrapy y Selenium, y hago ejemplos de como resolverlo. Si te interesa saber más pre-inscríbete aquí: forms.gle/yhjMbmEPscdo5KhW8
Gracias
hola Leonardo, muy buen tutorial, sin embargo, no me imprime los datos de precio y descripcion sino que me despliega una lista de sesiones comenzadas por [
Lo más probable es que te haya faltado el ".text" para extraer el texto del elemento.
Si quieres aprender mucho más en detalle sobre Selenium y otras herramientas para el Web Scraping no dudes en checar mi curso online de Web Scraping con más de 13 horas de contenido. Te dejo un link para que lo puedas adquirir al precio más bajo en tu moneda local: www.udemy.com/course/curso-maestro-web-scraping/?couponCode=NUEVENOVENTAYNUEVE
Ayuda: Hola tengo una duda : en la variable autos, deberia de tener algún tamaño o valor cuando se ejecuta) porque me sale tamaño=0
Hola! Como hago para organizar los datos que están en print() utilizando el pandas? Gracias.
Hola! Mete los datos en una lista de diccionarios que quede así:
d = [
{'nombre': 'CARRO 1', 'precio': 398},
{'nombre': 'CARRO 2', 'precio': 999}
... ETC ...
]
Para esto crea la lista vacia:
d = [ ]
Y luego empiezas a añadir los diccionarios a la lista dentro del for:
d.append( {'nombre': titulo, 'precio': precio} )
Luego haces:
import pandas as pd
pd.DataFrame(d)
Por cierto, pronto lanzaré un curso completo sobre Web Scraping. Si te interesa puedes pre-inscribirte aquí: forms.gle/h4LqRXRfC8W5Rs8D6
Asi como importo usted los datos de descripción y precio, como se podría importar imágenes
¡Hola! Para descargar imágenes tienes que utilizar otra librería llamada Pillow. Puedes encontrar referencias de como hacer esto utilizando Selenium y esta librería Pillow aquí en la sección 3 de este artículo:
towardsdatascience.com/image-scraping-with-python-a96feda8af2d
Te haré un resumen. Se hace un requerimiento a la URL de la imágen que tienes que extraer con Selenium de la página web. Usualmente está en el atributo "src" de la imagen. Luego haces un requerimiento get con la librería requests a esta imágen. Y con la librería io, y Pillow te descargas la imagen en tu computadora.
import requests
from PIL import Image
import io
url = "url.de.la.imagen"
image_content = requests.get(url).content
image_file = io.BytesIO(image_content)
image = Image.open(image_file).convert('RGB')
file_path = 'imagen1.jpg' # nombre a guardar de la imagen
with open(file_path, 'wb') as f:
image.save(f, "JPEG", quality=85)
Se puede hacer con Google maps?
se podria postear con wordpress?
Hola, y usando scroll down como seria
Leonardo pudieras preparar algo asi pero extrayendo tambien las imagenes???
Hola Gabriel. Te comento que acabé de lanzar un curso maestro donde podrás aprender TODO sobre Web Scraping, incluyendo la extracción de imágenes de un sitio web. Te puedes inscribir y ver más información entrando en el siguiente link: www.udemy.com/course/curso-maestro-web-scraping/?referralCode=1BA4AD4AD4BED138A583
Como puedo exportarlo a csv?
y como seria si solo deseo el precio y descripcion de un solo auto en particular
bro excelente video... pero sabes porque la ventana de chrome se me cierra automaticamente apenas se completa la carga de la pagina, sabes que podria ser?
Hola Juan,
Podrías compartirme tu código para ayudarte de una mejor manera?
Me pasaba que no cargaba los datos. Es porque mi internet es un poco lento. Para ello puse un intervalo de tiempo de 10 segundos para que la pagina cargue bien. import time y luego de la linea give.get pongo time.sleep(10). Problema resuelto. Espero haber ayudado.
Hola Jorge.
Muchas gracias!
Pues sí, al parecer en realidad creo que la página ha cambiado un poco y el botón como tal, carga de forma dinámica un poco luego de que la página ha terminado su carga inicial.
Por cierto, te comento que tengo un curso maestro de extracción de datos de la web, en donde podrás aprender muchísimas más herramientas con mucho mayor detalle para hacer Web Scraping. Te comparto un link para que veas mas info si te interesa: www.udemy.com/course/curso-maestro-web-scraping/?referralCode=1BA4AD4AD4BED138A583
Gracias de nuevo!
Un saludo
muy bueno... pero no imprime en el shell de python; print(precio) y tampoco print(descripcion). ¿A que se deberá este error?
Porfavor comparteme tu codigo para poder ayudarte de mejor manera
tal vez te ayude el comentario que puse arriba.
Buenas, no me ejecuta el codigo al poner seleniumvid.py, asi tambien nombre al mio. Solo abre en un txt el codigo, pero no lo ejecuta. Ayuda por favor
Hola Axl,
No entiendo muy bién el problema. Como estás intentando ejecutar el programa?
amigo muy buen video, pero me sale este error al ejecutarlo :(
DevTools listening on ws://127.0.0.1:58210/devtools/browser/30324809-08a3-47f9-a170-7b96d4fdd037
[536:15260:0103/165824.006:ERROR:device_event_log_impl.cc(211)] [16:58:24.004] USB: usb_device_handle_win.cc:1020 Failed to read descriptor from node connection: Uno de los dispositivos conectados al sistema no funciona. (0x1F)
@Leonardo Kuffo, nos ayudarías con esta duda, por favor, Intente instalando el webdriver manager pero sucede el mismo error :( ... Gracias por compartir tu conocimiento !
Cordial saludo
Cuando me abre el driver de Chrome no me permite la conexión a internet, ya desactive el antivirus, e igual no funciona.
Hola Julio,
Intenta reiniciando tu computadora. He leído que esto puede solucionar este extraño problema.
Un saludo
Tengo problemas con la versión de mi driver, mi versión es Versión 83.0.4103.106 (Build oficial) (64 bits)
Hola Dainer,
¿Que problema estás teniendo en específico?
Esa versión si se encuentra soportada dentro de las versiones actuales de Selenium WebDriver: sites.google.com/a/chromium.org/chromedriver/downloads
Gracias ya logré solucionarlo!
Hola Leonardo! Oye el codigo da un error, incluso copiado directo, y revise la pagina y no ha sufrido cambios en su estructura. Este es el error.
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//button[@data-aut-id="btnLoadMore"]"}
Saludos
Hola Juan. La carga del botón que obtenemos en la línea 9 se ha convertido en dinámica luego de que carga la página. Por lo que en la línea 8 tenemos que agregar un sleep(3), para poder obtener el botón sin problemas.
@@LeonardoKuffo Ok! Voy a probar! Gracias. Y te puedo preguntar una cosa mas, pero por otro medio? Que me tiene súper complicado jajaja
Está muy bueno, pero en pypi no puedo instalar time, me ayudan? :c
Hola! Time ya viene instalado por defecto con python. Es decir no debes instalarlo. No deberia darte ningun error al utilizarla :))
hola compa tengo este error C:\Users\legolas\PycharmProjects\pythonProject1\venv\Scripts\python.exe C:/Users/legolas/PycharmProjects/pythonProject1/main.py
Traceback (most recent call last):
File "C:\Users\legolas\PycharmProjects\pythonProject1\main.py", line 8, in
driver = webdriver.chrome('chromedriver.exe')
TypeError: 'module' object is not callable
A mi me aparece este error [8632:15932:0726/195113.868:ERROR:device_event_log_impl.cc(208)] [19:51:13.868] Bluetooth: bluetooth_adapter_winrt.cc:1074 Getting Default Adapter failed. :(
Hola Carlos,
Podrías intentar actualizando Google Chrome?
Y por ende, descárgate la versión correspondiente al WebDriver de la nueva versión que instalaste
Me avisas como te va
buenas, excelente video y canal!! pero en mi caso no lo pude lograr ya que me da error al colocar .text:
File "c:\Users\Usuario\Desktop\Programación\alquiler.py", line 67, in
aptos_cv = driver.find_elements_by_xpath('//li[@class="ui-search-layout__item"]').text
AttributeError: 'list' object has no attribute 'text'
También al colocar .find_elements_by_xpath luego de la variable dentro del for, no me la marca en color, al parecer no la reconoce. He probado de todo.
Espero alguien me pueda ayudar, saludos y muchas gracias!!
Excelente video, pero me pasa igual que el compañero, ojala nos pueda ayudar.
ni es elements - es element
uere ele
No entiendo tu forma de escribir xpath... todos los navegadores tienen extractor de xpath integrado, pero tu se basas en copiar el codigo desde imagino un papel o otra pantalla y resulta desesperante tener que aprender python + selenium + xpath cuando una parte te la puedes saltar usando el codigo que devuelve chrome... pero tu la has creado anteriormente
A largo plazo no es recomendable utilizar el extractor xpath del navegador, dado que esas expresiones tienen ALTO acoplamiento y con cualquier minimo cambio que hagan los devs, te dejan de funcionar.
@@estebanmoya7071 ESTO!!! 👌
De verdad no sabes pronunciar la letra R? Se dice Erre. No 'ere'.
leo muchas gracias por la informacion, hay algun grupo de telegram o discord para poder interactuar?
Si los siguientes métodos no funcionan:
find_elements_by_xpath()
find_element_by_xpath()
puedes usar las siguientes:
find_elements("xpath", '//li[@data-aut-id="itemBox"]')
precio = moto.find_element("xpath", './/span[@data-aut-id="itemPrice"]').text
Muy bien video, muchas gracias
Muy bueno!!!!