Stop guessing what′s working and start seeing it for yourself.
login ou enregistrement
Q&A
Question Center →

Un tutorial de Semalt: Web Scraping en Python

Recientemente he visitado KinoPoisk (versión rusa de IMDB) y descubrí que durante el años logré calificar más de 1000 películas. Pensé que sería interesante investigar estos datos de forma más detallada: ¿han cambiado mis gustos de película con el tiempo? ¿En qué temporadas del año veo más películas?

Pero antes de analizar y construir bellos gráficos, necesitamos obtener los datos. Desafortunadamente, muchos servicios no tienen API pública, por lo que debe arremangarse y analizar las páginas html.

Este artículo está dirigido a aquellos que siempre quisieron aprender a utilizar el desguace web, pero no lo tuvieron en sus manos o no supieron por dónde empezar.

Tarea

Nuestra tarea es extraer los datos sobre las películas ya vistas: el título de la película, la fecha y hora de la visualización, la calificación del usuario.

De hecho, nuestro trabajo se realizará en 2 etapas:

Etapa 1: descargar y guardar páginas html

Etapa 2: analizar html en un formato adecuado para análisis adicional (csv, json, pandas dataframe etc.)

Instrumentos

Hay muchas bibliotecas de python para enviar solicitudes http. El más famoso y muy útil es Solicitudes.

También es necesario elegir una biblioteca para el análisis html.

BeatifulSoup, lxml

Estas son las dos bibliotecas más populares para analizar html y elegir una de ellas es solo una preferencia personal. Además, estas bibliotecas están estrechamente conectadas entre sí: BeautifulSoup comenzó a usar lxml como un analizador interno para la aceleración, y en lxml, se agregó un módulo de procesador de sopa. Para comparar los enfoques, analizaré los datos con BeautifulSoup y usaré los selectores de XPath en el módulo lxml.html.

Descarga de datos

Comencemos a descargar datos. Antes que nada, intentemos obtener la página por url y guardarla en un archivo local.

Abrimos el archivo resultante y vemos que no es tan simple: el sitio nos considera robots y no muestra los datos..

Descubramos cómo funciona el sitio

El navegador no tiene problemas para obtener información del sitio. Veamos cómo exactamente envía la solicitud. Para hacer esto, usamos el panel "Red" en las "Herramientas de desarrollador" en el navegador (uso Firebug para esto), generalmente, la solicitud que necesitamos es la más larga.

Como podemos ver, el navegador también envía a los encabezados UserAgent, cookie y otro número de parámetros. Primero, intentaremos enviar el UserAgent correcto a un encabezado.

Esta vez tenemos éxito, y ahora se nos proporcionan los datos necesarios. Vale la pena señalar que a veces el sitio también verifica la validez de las cookies, en cuyo caso las sesiones en la biblioteca de Solicitudes ayudarán.

Descargar todas las tarifas

Ahora podemos guardar una página con las tarifas. Pero, por lo general, el usuario tiene muchas tarifas, y es necesario recorrer todas las páginas. El número de página que nos interesa es fácil de transferir directamente a la url.

Recopilación de datos de Html

Ahora vamos directamente a recopilar los datos de html. La forma más fácil de entender cómo está estructurada la página html es mediante el uso de la función "Inspeccionar elemento" en el navegador. En este caso, todo es bastante simple: toda la tabla con tasas está en la etiqueta. Seleccione este nodo:

from bs4 import BeautifulSoup

from lxml import html

# Beautiful Soup

soup = BeautifulSoup(text)

film_list = soup.find('div', ('class': 'profileFilmsList'))

# lxml

tree = html.fromstring(text)

film_list_lxml = tree.xpath('//div[@class = ''profileFilmList'']')[0]

Aprendamos a sacar el título ruso de la película y un enlace a la página de la película (también cómo obtener el texto y el valor del atributo).

Si necesita extraer el título en inglés simplemente cambie "nameRus" por "nameEng".

Resultados

Aprendimos a analizar sitios web, conocimos las solicitudes de bibliotecas, BeautifulSoup y lxml, así como también recibimos datos adecuados para análisis posteriores de películas ya vistas en KinoPoisk.

Post a comment

Post Your Comment

Skype

semaltcompany

WhatsApp

16468937756

Telegram

Semaltsupport