Python Web Scraping: sitios web basados en formularios
En el capítulo anterior, hemos visto cómo raspar sitios web dinámicos. En este capítulo, entendamos el raspado de sitios web que funcionan con entradas basadas en usuarios, es decir, sitios web basados en formularios.
Introducción
En estos días, WWW (World Wide Web) se está moviendo hacia las redes sociales, así como hacia los contenidos generados por los usuarios. Entonces, surge la pregunta de cómo podemos acceder a ese tipo de información que está más allá de la pantalla de inicio de sesión. Para ello tenemos que lidiar con formularios e inicios de sesión.
En capítulos anteriores, trabajamos con el método HTTP GET para solicitar información, pero en este capítulo trabajaremos con el método HTTP POST que envía información a un servidor web para su almacenamiento y análisis.
Interactuar con formularios de inicio de sesión
Mientras trabajaba en Internet, debe haber interactuado con los formularios de inicio de sesión muchas veces. Pueden ser muy simples, como incluir solo unos pocos campos HTML, un botón de envío y una página de acción, o pueden ser complicados y tener algunos campos adicionales como correo electrónico, dejar un mensaje junto con el captcha por razones de seguridad.
En esta sección, trataremos con un formulario de envío simple con la ayuda de la biblioteca de solicitudes de Python.
Primero, necesitamos importar la biblioteca de solicitudes de la siguiente manera:
import requests
Ahora, debemos proporcionar la información para los campos del formulario de inicio de sesión.
parameters = {‘Name’:’Enter your name’, ‘Email-id’:’Your Emailid’,’Message’:’Type your message here’}
En la siguiente línea de código, debemos proporcionar la URL en la que se realizaría la acción del formulario.
r = requests.post(“enter the URL”, data = parameters)
print(r.text)
Después de ejecutar el script, devolverá el contenido de la página donde ocurrió la acción.
Suponga que si desea enviar cualquier imagen con el formulario, entonces es muy fácil con request.post (). Puede entenderlo con la ayuda de la siguiente secuencia de comandos de Python:
import requests
file = {‘Uploadfile’: open(’C:\Usres\desktop\123.png’,‘rb’)}
r = requests.post(“enter the URL”, files = file)
print(r.text)
Carga de cookies desde el servidor web
Una cookie, a veces llamada cookie web o cookie de Internet, es un pequeño fragmento de datos enviado desde un sitio web y nuestra computadora lo almacena en un archivo ubicado dentro de nuestro navegador web.
En el contexto del trato con los formularios de inicio de sesión, las cookies pueden ser de dos tipos. Uno, lo tratamos en la sección anterior, que nos permite enviar información a un sitio web y el segundo, que nos permite permanecer en un estado permanente de "sesión iniciada" durante nuestra visita al sitio web. Para el segundo tipo de formularios, los sitios web utilizan cookies para realizar un seguimiento de quién está conectado y quién no.
¿Qué hacen las cookies?
En estos días, la mayoría de los sitios web utilizan cookies para realizar un seguimiento. Podemos comprender el funcionamiento de las cookies con la ayuda de los siguientes pasos:
Step 1- Primero, el sitio autenticará nuestras credenciales de inicio de sesión y las almacenará en la cookie de nuestro navegador. Esta cookie generalmente contiene información de seguimiento, tiempo de espera y toke generado por el servidor.
Step 2- A continuación, el sitio web utilizará la cookie como prueba de autenticación. Esta autenticación siempre se muestra cada vez que visitamos el sitio web.
Las cookies son muy problemáticas para los web scrapers porque si los web scrapers no realizan un seguimiento de las cookies, el formulario enviado se devuelve y en la página siguiente parece que nunca iniciaron sesión. Es muy fácil rastrear las cookies con la ayuda de Pitón requests biblioteca, como se muestra a continuación -
import requests
parameters = {‘Name’:’Enter your name’, ‘Email-id’:’Your Emailid’,’Message’:’Type your message here’}
r = requests.post(“enter the URL”, data = parameters)
En la línea de código anterior, la URL sería la página que actuará como procesador para el formulario de inicio de sesión.
print(‘The cookie is:’)
print(r.cookies.get_dict())
print(r.text)
Después de ejecutar el script anterior, recuperaremos las cookies del resultado de la última solicitud.
Existe otro problema con las cookies: a veces, los sitios web modifican las cookies con frecuencia sin previo aviso. Este tipo de situación se puede resolverrequests.Session() como sigue -
import requests
session = requests.Session()
parameters = {‘Name’:’Enter your name’, ‘Email-id’:’Your Emailid’,’Message’:’Type your message here’}
r = session.post(“enter the URL”, data = parameters)
En la línea de código anterior, la URL sería la página que actuará como procesador para el formulario de inicio de sesión.
print(‘The cookie is:’)
print(r.cookies.get_dict())
print(r.text)
Observe que puede comprender fácilmente la diferencia entre un script con sesión y sin sesión.
Automatizar formularios con Python
En esta sección vamos a tratar un módulo de Python llamado Mechanize que reducirá nuestro trabajo y automatizará el proceso de llenado de formularios.
Módulo de mecanizado
El módulo Mechanize nos proporciona una interfaz de alto nivel para interactuar con formularios. Antes de comenzar a usarlo debemos instalarlo con el siguiente comando:
pip install mechanize
Tenga en cuenta que solo funcionaría en Python 2.x.
Ejemplo
En este ejemplo, vamos a automatizar el proceso de completar un formulario de inicio de sesión que tiene dos campos, a saber, correo electrónico y contraseña:
import mechanize
brwsr = mechanize.Browser()
brwsr.open(Enter the URL of login)
brwsr.select_form(nr = 0)
brwsr['email'] = ‘Enter email’
brwsr['password'] = ‘Enter password’
response = brwsr.submit()
brwsr.submit()
El código anterior es muy fácil de entender. Primero, importamos el módulo de mecanizado. Luego se ha creado un objeto de navegador Mechanize. Luego, navegamos a la URL de inicio de sesión y seleccionamos el formulario. Después de eso, los nombres y valores se pasan directamente al objeto del navegador.