¿Biblioteca de Python para raspado web complejo?

Mi objetivo es interactuar con un sitio web (Portfolio123.com) y descargar los resultados del estudio financiero.

Acceder al contenido significa iniciar sesión, luego hacer clic en los botones y/o completar formularios. Algunos de estos botones se cargan usando 'body onload'. El HTML resultante a menudo contiene un enlace a un archivo de Excel descargable que se genera específicamente para el usuario que ha iniciado sesión.

Por lo tanto algunos de los requisitos son:

  • Galletas.
  • Espera a "carga del cuerpo".
  • Encuentre (y haga clic) un elemento por id, nombre o XPath.
  • Importa una tabla dada desde HTML.
  • Ejecute JavaScript.
  • Descarga a expediente y/oa oposición.

Algunas opciones preliminares que se me han ocurrido hasta ahora:

  • selenio _
  • RoboBrowser . EDITAR: solicitudes de mezclas y BeautifulSoup. No hará clic en los botones de JavaScript.
  • Mecanizar + ExecJS . EDITAR: Mecanizar no funcionó para mí. Consulte https://stackoverflow.com/questions/30655568/login-to-a-website-using-python-and-mechanize
  • Raspado _ Esto parece que tiene como objetivo el rastreo web. ¿Pero hará bien el trabajo?
  • PythonWebKit . Esto parecía prometedor, pero cuando intenté instalarlo en Python usando pip install PyhthonWebKit, que no funcionó. Recibí el mensaje: "No se encontró una distribución coincidente para PythonWebKit".
  • raspado en seco

¿Alguno de estos funciona?

Obtuve esta lista al buscar en la web, pero ni siquiera sé si hacen el trabajo. Espero que aquellos de ustedes con experiencia con estas bibliotecas puedan informarme sobre esto.
De su pregunta, algunas cosas más no están claras: ¿está buscando una biblioteca (para codificar su propia aplicación) o alguna aplicación lista para usar que solo necesitaría configurar? Además, el título es engañoso y podría tentar a uno u otro a marcarlo para cerrarlo (no cubrimos procedimientos, manuales, tutoriales y similares).
Olvidaste incluir Beautiful Soup ( crummy.com/software/BeautifulSoup ). No estoy seguro de si puede hacer lo que quieres, pero calificó muy arriba con Scrapy, así que mientras pruebas a los demás, puedes probarlo también.
@Mawg BeautifulSoup es una poderosa herramienta para analizar HTML. Se puede usar encima de algunas de las otras opciones anteriores cuando sea necesario.

Respuestas (3)

  • PyQt es uno que podría ayudar a trabajar mejor que los sitios complejos llenos de JS.
  • Selenium está bien, mira un ejemplo .
  • DryScrape está bien, aunque no lo he usado mucho.

Es muy fácil cuando usas dryscrape python . En una PC con Ubuntu, la instalación es la siguiente:

# apt-get install qt5-default libqt5webkit5-dev build-essential \
python-lxml python-pip xvfb

Uso de la siguiente manera:

Import dryscrape as d
    Import time #for refreshing or waiting for page
    d.start_xvfb() #for using this in linux without Xserver
    br = d.Session() #creating new session
    br.visit('<Any Url>') #for open the page
    Input = br.at_xpath('//*[@name="email"]') #for find input
    Input.set('<input value>')
    Input.form().submit() #for submit
    time.sleep(5) #wait for page load

Esto funciona bien en Android.

Selenium puede hacer cualquier cosa que el usuario pueda hacer en un navegador, de forma cruzada. Es el estándar W3C para la automatización del navegador, y aprender Selenium es una buena habilidad para su carrera (más allá de este proyecto de raspado web).

Es ampliamente utilizado para la automatización de pruebas de aplicaciones basadas en web.