2009-08-18 16 views
21

supongamos, necesito realizar un conjunto de procedimientos en un sitio web particular decir, complete algunos formularios, haga clic en el botón enviar, envíe los datos al servidor, reciba la respuesta, vuelva a hacer algo en función de la respuesta y envíe los datos al servidor del sitio web. Sé que hay un módulo webbrowser en python, pero quiero hacer esto sin invocar ningún navegador web. Tiene que ser un guión puro.¿Cómo automatizar la navegación con Python?

¿Hay algún módulo disponible en python que pueda ayudarme a hacer eso?
gracias

+0

duplicado: http://stackoverflow.com/search?q=%5Bpython%5D+scraping. Todas las preguntas sobre raspado de pantalla responden a esta pregunta. Específicamente: http://stackoverflow.com/questions/419260/grabbing-text-from-a-webpage –

+1

Selenium es la única solución completa a esto por lo que puedo decir y he analizado todas las opciones para este tipo de cosas Puedo encontrar ... si solo necesitas tomar páginas web, mecanizar te irá bien o harás una entrada básica, pero para una emulación de navegador real parece que necesitas selenio – Rick

Respuesta

15

También puede consultar mechanize. Su objetivo es manejar "navegación web programática con estado" (según su sitio).

+1

mecanizar, en mi experiencia, es bastante lento, pero una vez https, cookies , inicios de sesión, están involucrados, es * mucho * más fácil que urllib2. –

+1

selenio proporciona mucho más que mecanizar, pero mecanizar es bueno solo para cosas básicas pero causará problemas si está tratando de hacer una emulación de navegador real ya que no hace cosas como descargar automáticamente imágenes, archivos CSS, etc. y parece ser siempre detectable por los sitios más estrictos como una herramienta automatizada – Rick

+1

Lamentablemente, el mecanizado ya no se mantiene y no es compatible con Python 3. –

0

Es probable que desee urllib2. Puede manejar cosas como HTTPS, cookies y autenticación. Probablemente también desee BeautifulSoup para ayudar a analizar las páginas HTML.

2

Hay muchos módulos de python integrados que podrían ayudar con esto. Por ejemplo, urllib y htmllib.

El problema será más simple si cambia la forma de acercarse a él. Usted dice que desea "completar algunos formularios, hacer clic en el botón Enviar, enviar los datos al servidor, recibir la respuesta", lo que parece un proceso de cuatro etapas.

De hecho, lo que necesita hacer es publicar algunos datos en un servidor web y obtener una respuesta.

Esto es tan simple como:

>>> import urllib 
>>> params = urllib.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0}) 
>>> f = urllib.urlopen("http://www.musi-cal.com/cgi-bin/query", params) 
>>> print f.read() 

(ejemplo tomado de los docs urllib).

Lo que haga con la respuesta depende de cuán complejo es el HTML y qué quiere hacer con él. Puede salirse con la suya analizando con una expresión regular o dos, o puede usar la clase htmllib.HTMLParser, o tal vez un analizador más flexible y de mayor nivel como Beautiful Soup.

0

Puede echarle un vistazo a estas diapositivas desde last italian pycon (pdf): El autor listó la mayor parte de la biblioteca para realizar raspado y navegación automática en python. así que puedes echarle un vistazo.

Me gusta mucho twill (que ya se ha sugerido), que ha sido desarrollado por uno de los autores de nose y está específicamente dirigido a probar sitios web.

+2

El enlace al PDF es 404. – xApple

0

Internet Explorer específica, sino más bien buena:

http://pamie.sourceforge.net/

La ventaja en comparación con urllib/BeautifulSoup es que se ejecuta Javascript, así, ya que utiliza el IE.

16

selenio hará exactamente lo que quiere y que administra el código JavaScript

+1

Aunque no creo que esto pueda hacerse sin cabeza, que es lo que a menudo está implícito en "script puro", esto simulará lo más posible una experiencia de navegador real ... ya que está usando un navegador real. La mayoría de los sitios de hoy están completamente rotos sin Javascript, lo que hace que mecanizar sea obsoleto. – Cerin

+1

esto está mal. Puedes falsificar fácilmente un navegador usando la pantalla Pyvirtual para ejecutar Python con selenio en un modo sin cabeza. – Amistad

+0

Hay [http://www.seleniumhq.org/docs/03_webdriver.jsp#htmlunit-driver] (http://www.seleniumhq.org/docs/03_webdriver.jsp#htmlunit-driver). También vea, [https://github.com/detro/ghostdriver](https://github.com/detro/ghostdriver). Ambos son para encabezados javascript. El primero es oficial y el segundo es un tercero. –

0

httplib2 + BeautifulSoup

uso Firefox Firebug + + HTTPREPLAY para ver lo que pasa a la javascript y desde el navegador de la web.Usando httplib2 que esencialmente puede hacer lo mismo por correo postal y obtener

2

Selenium2 incluye WebDriver, que tiene python bindings y permite utilizar el conductor HtmlUnit sin cabeza, o cambiar a Firefox o Chrome para la depuración gráfica.

7

Todos respuestas son viejos, recomiendo y yo soy un gran fan de requests

Desde la página principal: Módulo urllib2 estándar

del Python proporciona la mayoría de los protocolos HTTP capacidades que necesita, pero el API es completamente roto. Fue construido por un tiempo diferente - y una web diferente. Requiere una enorme cantidad de trabajo de (incluso reemplaza el método) para realizar las tareas más simples de .

Las cosas no deberían ser así. No en Python.

7

Creo que la mejor solución es la mezcla de requests y BeautifulSoup, sólo quería actualizar la pregunta por lo que puede mantenerse actualizado.

3

Selenium http://www.seleniumhq.org/ es la mejor solución para mí. puedes codificarlo con Python, Java o cualquier otro lenguaje de programación que desees con facilidad. y simulación fácil que se convierte en programa.

1

La mejor solución que he encontrado (y actualmente de aplicación) es: - scripts en Python usando el selenio WebDriver - PhantomJS navegador sin cabeza (si se utiliza Firefox tendrá una interfaz gráfica de usuario y será más lenta)

2

No se olvide que es envoltorio alrededor de mechanize.

zope.testbrowser proporciona un navegador web programable fácil de usar con un enfoque especial en las pruebas.

1

He encontrado que el iMacros Firefox plugin (que es gratis) funciona muy bien.

Se puede automatizar con Python usando las interfaces de objetos COM de Windows. Aquí hay un código de ejemplo de http://wiki.imacros.net/Python. Requiere Python Windows Extensions:

import win32com.client 
def Hello(): 
    w=win32com.client.Dispatch("imacros") 
    w.iimInit("", 1) 
    w.iimPlay("Demo\\FillForm") 
if __name__=='__main__': 
    Hello() 
+0

¿Esto solo funciona en máquinas con Windows? – MikeiLL

+1

Sí, hasta donde yo sé, cualquier cosa que use las bibliotecas de win32 solo funciona en Windows. – twasbrillig

Cuestiones relacionadas