javascript - example - selenium scraping
Selenium versus BeautifulSoup para raspado web (2)
Estoy raspando el contenido de un sitio web usando Python. Primero usé BeautifulSoup
y Mechanize
en Python, pero vi que el sitio web tenía un botón que creaba contenido a través de JavaScript, así que decidí usar Selenium
.
Dado que puedo encontrar elementos y obtener su contenido utilizando Selenium con métodos como driver.find_element_by_xpath
, ¿por qué motivo usar BeautifulSoup
cuando puedo usar Selenium para todo?
Y en este caso particular, necesito usar Selenium para hacer clic en el botón JavaScript, ¿es mejor usar Selenium para analizar también o debo usar Selenium y Beautiful Soup?
Antes de responder a su pregunta directamente, vale la pena decirlo como punto de partida: si todo lo que necesita hacer es extraer contenido de páginas HTML estáticas, probablemente debería usar una biblioteca HTTP (como Requests o urllib.request
) con lxml
o BeautifulSoup
, no Selenium (aunque Selenium probablemente también será adecuado). Las ventajas de no utilizar selenio innecesariamente:
- Ancho de banda Utilizar Selenium significa obtener todos los recursos que normalmente se obtendrían al visitar una página en un navegador: hojas de estilo, scripts, imágenes, etc. Esto es probablemente innecesario.
- Estabilidad y facilidad de recuperación de errores. El selenio puede ser un poco frágil, según mi experiencia, incluso con PhantomJS, y crear la arquitectura para eliminar una instancia de Selenium bloqueada y crear una nueva es un poco más irritante que configurar una lógica simple de reintento en la excepción al usar
requests
. - Potencialmente, el uso de la CPU y la memoria, dependiendo del sitio que esté rastreando y la cantidad de subprocesos de la araña que intenta ejecutar en paralelo, es posible que la lógica de diseño DOM o la ejecución de JavaScript puedan ser bastante caras.
Tenga en cuenta que un sitio que requiera cookies para funcionar no es una razón para separar Selenium: puede crear fácilmente una función de apertura de URL que configura y envía mágicamente las cookies con solicitudes HTTP utilizando cookielib / cookiejar .
De acuerdo, entonces, ¿por qué podrías considerar usar Selenium? Casi por completo para manejar el caso en el que el contenido que desea rastrear se agrega a la página a través de JavaScript, en lugar de incluirse en el HTML. Incluso entonces, puede obtener los datos que desea sin romper la maquinaria pesada. Normalmente se aplica uno de estos escenarios:
- JavaScript servido con la página tiene el contenido ya incorporado. El JavaScript está justo ahí para hacer las plantillas u otra manipulación de DOM que coloca el contenido en la página. En este caso, es posible que desee ver si hay una forma fácil de extraer el contenido que le interesa directamente de JavaScript utilizando regex.
- El JavaScript está golpeando una API web para cargar contenido. En este caso, considere si puede identificar las URL de API relevantes y simplemente péguelas por su cuenta; Esto puede ser mucho más simple y directo que ejecutar JavaScript y eliminar contenido de la página web.
Si decide que su situación merece utilizar Selenium, utilícelo con el controlador PhantomJS , no, por ejemplo, el controlador predeterminado de Firefox. Lo ideal es que la web no requiera la representación gráfica de la página, o el uso de características o características específicas del navegador, por lo que un navegador sin cabeza, con su menor costo de CPU y memoria y menos partes móviles para bloquear o bloquear, es ideal.
Utilicé Selenium para el desguace web, pero no es una solución feliz . En mi último proyecto utilicé https://github.com/chromedp/chromedp . Es una solución más simple que el selenio.