El web scraping es una técnica común que se utiliza para obtener datos de Internet para diferentes tipos de aplicaciones. Con los datos casi ilimitados disponibles en línea, los desarrolladores de software han creado muchas herramientas para hacer posible compilar información de manera eficiente. Durante el proceso de raspado web, un programa informático envía una solicitud a un sitio web en Internet. Se envía un documento Html como respuesta a la solicitud del programa. Dentro de ese documento hay información que puede interesarle para un propósito u otro. Para acceder a estos datos rápidamente, entra en juego el paso del análisis. Al analizar el documento, podemos aislar y centrarnos en los puntos de datos específicos que nos interesan. Las bibliotecas comunes de Python para ayudar con esta técnica son Beautiful Soup, lxml y RequestsEn este tutorial, pondremos estas herramientas en funcionamiento para aprender a implementar Web Scraping usando Python.


Instalar el código de raspado web

Para seguir, ejecute estos tres comandos desde la terminal. También se recomienda hacer uso de un entorno virtual para mantener las cosas limpias en su sistema.

  • pip instalar lxml
  • solicitudes de instalación de pip
  • pip instalar beautifulsoup4

Encuentre un sitio web para raspar

Para aprender cómo hacer web scraping, podemos probar un sitio web llamado http://quotes.toscrape.com/ que parece que fue creado para este propósito.

sitio web para web scraping

Desde este sitio web, tal vez nos gustaría crear un almacén de datos de todos los autores, etiquetas y citas de la página. ¿Cómo se pudo hacer eso? Bueno, primero podemos mirar la fuente de la página. Estos son los datos que realmente se devuelven cuando se envía una solicitud al sitio web. Entonces, en el navegador web Firefox, podemos hacer clic con el botón derecho en la página y elegir "ver la fuente de la página".

fuente de la página de visualización del navegador Firefox

Esto mostrará el marcado HTML sin procesar en la página. Se muestra aquí como referencia.

Como puede ver en el marcado anterior, hay una gran cantidad de datos que parecen mezclados. El propósito del web scraping es poder acceder solo a las partes de la página web que nos interesan. Muchos desarrolladores de software emplearán expresiones regulares para esta tarea, y esa es definitivamente una opción viable. La biblioteca Python Beautiful Soup es una forma mucho más sencilla de extraer la información que queremos.


Construyendo el guión de scraping

En PyCharm, podemos agregar un nuevo archivo que contendrá el código Python para raspar nuestra página.

raspado web pycharm

scraper.py

El código anterior es el comienzo de nuestro script de extracción de Python. En la parte superior del archivo, lo primero que debe hacer es importar las solicitudes y las bibliotecas BeautifulSoup. Luego, configuramos la URL que queremos raspar directamente en esa urlvariable. Esto luego se pasa a la función request.get () y asignamos el resultado a la responsevariable. Usamos el constructor BeautifulSoup () para poner el texto de respuesta en la soupconfiguración de variable lxml como formato. Por último, imprimimos elsoupvariable y debería ver algo similar a la captura de pantalla a continuación. Esencialmente, el software visita el sitio web, lee los datos y visualiza la fuente del sitio web de la misma forma que lo hicimos manualmente anteriormente. La única diferencia es que esta vez, todo lo que tuvimos que hacer fue hacer clic en un botón para ver el resultado. ¡Con buena pinta!

hermosa sopa de pitón en pycharm


Atravesando estructuras HTML

HTML significa lenguaje de marcado de hipertexto y funciona distribuyendo elementos del documento HTML con etiquetas específicas. HTML tiene muchas etiquetas diferentes, pero un diseño general implica tres básicas. Una etiqueta HTML, una etiqueta de cabeza y una etiqueta de cuerpo. Estas etiquetas organizan el documento HTML. En nuestro caso, nos centraremos principalmente en la información dentro de la etiqueta del cuerpo. En este punto, nuestro script puede obtener el marcado Html de nuestra URL designada. El siguiente paso es enfocarnos en los datos específicos que nos interesan. Tenga en cuenta que si usa la herramienta de inspección en su navegador, es bastante fácil ver exactamente qué marcado Html es responsable de representar una determinada información en la página. Cuando colocamos el puntero del mouse sobre una etiqueta de intervalo en particular, podemos ver que el texto asociado se resalta automáticamente en la ventana del navegador.span etiqueta que también tiene una clase de texto . Así es como descifras cómo extraer datos. Busca patrones en la página y luego crea código que funciona en ese patrón. Juegue y observe que esto funciona sin importar dónde coloque el puntero del mouse. Podemos ver el mapeo de una cotización específica a un marcado HTML específico. El raspado web permite obtener fácilmente todas las secciones similares de un documento Html. Eso es prácticamente todo el HTML que necesitamos saber para extraer sitios web simples.

inspeccionar el HTML de la página web usando el inspector del navegador

Análisis de marcado HTML

Hay mucha información en el documento Html, pero Beautiful Soup hace que sea realmente fácil encontrar los datos que queremos, a veces con solo una línea de código. Así que sigamos adelante y busquemos todas las etiquetas de intervalo que tengan una clase de texto. Esto debería encontrar todas las citas para nosotros. Cuando desee encontrar varias etiquetas iguales en la página, puede utilizar la función find_all () .

scraper.py

Cuando se ejecuta el código anterior, a la variable quotes se le asigna una lista de todos los elementos del documento Html que es una etiqueta span con una clase de texto. La impresión de esa variable de comillas nos da el resultado que vemos a continuación. La etiqueta Html completa se captura junto con su contenido interno.

hermoso ejemplo de sopa find_all

Propiedad de texto Beautiful Soup

El marcado Html adicional que se devuelve en el script no es realmente lo que nos interesa. Para obtener solo los datos que queremos, en este caso, las comillas reales, podemos usar la propiedad .text que está disponible a través de Beautiful Soup. Tenga en cuenta el nuevo código resaltado aquí donde usamos un bucle for para iterar sobre todos los datos capturados e imprimir solo el contenido que queremos.

scraper.py

Esto nos da un buen resultado con solo las citas que nos interesan.

C: pythonvrequestsScriptspython.exe C: /python/vrequests/scraper.py
“El mundo tal como lo hemos creado es un proceso de nuestro pensamiento. No se puede cambiar sin cambiar nuestra forma de pensar ".
"Son nuestras elecciones, Harry, las que muestran lo que realmente somos, mucho más que nuestras habilidades".
"Solo hay dos maneras de vivir tu vida. Uno es como si nada fuera un milagro. El otro es como si todo fuera un milagro ".
"La persona, ya sea un caballero o una dama, a quien no le agrada una buena novela, debe ser intolerablemente estúpida".
"La imperfección es belleza, la locura es genialidad y es mejor ser absolutamente ridículo que absolutamente aburrido".
“Trate de no convertirse en un hombre de éxito. Mejor conviértete en un hombre de valor ".
"Es mejor ser odiado por lo que eres que amado por lo que no eres".
“No he fallado. Acabo de encontrar 10,000 formas que no funcionarán ".
“La mujer es como una bolsita de té; nunca se sabe qué tan fuerte es hasta que está en agua caliente ".
"Un día sin sol es como, ya sabes, noche".

Proceso terminado con código de salida 0

¡Ordenado! Para encontrar ahora todos los autores y también imprimirlos ya que están asociados con cada cita, podemos usar el código a continuación. Siguiendo los mismos pasos que antes, primero inspeccionamos manualmente la página que queremos raspar. Podemos ver que cada autor está contenido dentro de una etiqueta <small> con una clase de autor . Entonces seguimos el mismo formato que antes con la función find_all () y almacenamos el resultado en esa nueva authorsvariable. También necesitamos cambiar el bucle for para hacer uso de la función range () para que podamos iterar sobre las comillas y los autores al mismo tiempo.

scraper.py

Ahora obtenemos las citas y cada autor asociado cuando se ejecuta el script.

C: pythonvrequestsScriptspython.exe C: /python/vrequests/scraper.py
“El mundo tal como lo hemos creado es un proceso de nuestro pensamiento. No se puede cambiar sin cambiar nuestra forma de pensar ".
--Albert Einstein

"Son nuestras elecciones, Harry, las que muestran lo que realmente somos, mucho más que nuestras habilidades".
--J. K. Rowling

"Solo hay dos maneras de vivir tu vida. Uno es como si nada fuera un milagro. El otro es como si todo fuera un milagro ".
--Albert Einstein

"La persona, ya sea un caballero o una dama, a quien no le agrada una buena novela, debe ser intolerablemente estúpida".
--Jane Austen

"La imperfección es belleza, la locura es genialidad y es mejor ser absolutamente ridículo que absolutamente aburrido".
- Marilyn Monroe

“Trate de no convertirse en un hombre de éxito. Mejor conviértete en un hombre de valor ".
--Albert Einstein

"Es mejor ser odiado por lo que eres que amado por lo que no eres".
--André Gide

“No he fallado. Acabo de encontrar 10,000 formas que no funcionarán ".
- Thomas A. Edison

“La mujer es como una bolsita de té; nunca se sabe qué tan fuerte es hasta que está en agua caliente ".
--Eleanor Roosevelt

"Un día sin sol es como, ya sabes, noche".
--Steve Martín


Proceso terminado con código de salida 0

Finalmente, también agregaremos algo de código para recuperar todas las etiquetas de cada cotización. Este es un poco más complicado porque primero necesitamos buscar cada div de envoltura exterior de cada colección de etiquetas. Si no hiciéramos este primer paso, podríamos buscar todas las etiquetas, pero no sabríamos cómo asociarlas a un par de citas y autores. Una vez que se captura el div externo, podemos profundizar más usando la función find_all () nuevamente en * ese * subconjunto. A partir de ahí, tenemos que agregar un bucle interno al primer bucle para completar el proceso.

Este código ahora nos da el siguiente resultado. Bastante genial, ¿verdad?

C: pythonvrequestsScriptspython.exe C: /python/vrequests/scraper.py
“El mundo tal como lo hemos creado es un proceso de nuestro pensamiento. No se puede cambiar sin cambiar nuestra forma de pensar ".
--Albert Einstein
cambio
pensamientos profundos
pensando
mundo


"Son nuestras elecciones, Harry, las que muestran lo que realmente somos, mucho más que nuestras habilidades".
--J. K. Rowling
habilidades
opciones


"Solo hay dos maneras de vivir tu vida. Uno es como si nada fuera un milagro. El otro es como si todo fuera un milagro ".
--Albert Einstein
inspirador
vida
En Vivo
milagro
milagros


"La persona, ya sea un caballero o una dama, a quien no le agrada una buena novela, debe ser intolerablemente estúpida".
--Jane Austen
alfabetización
libros
clásico
humor


"La imperfección es belleza, la locura es genialidad y es mejor ser absolutamente ridículo que absolutamente aburrido".
- Marilyn Monroe
ser uno mismo
inspirador


“Trate de no convertirse en un hombre de éxito. Mejor conviértete en un hombre de valor ".
--Albert Einstein
edad adulta
éxito
valor


"Es mejor ser odiado por lo que eres que amado por lo que no eres".
--André Gide
vida
amor


“No he fallado. Acabo de encontrar 10,000 formas que no funcionarán ".
- Thomas A. Edison
edison
fracaso
inspirador
parafraseado


“La mujer es como una bolsita de té; nunca se sabe qué tan fuerte es hasta que está en agua caliente ".
--Eleanor Roosevelt
mal atribuido eleanor roosevelt


"Un día sin sol es como, ya sabes, noche".
--Steve Martín
humor
obvio
símil



Proceso terminado con código de salida 0

Practica el web scraping

En https://scrapingclub.com se puede encontrar otro gran recurso para aprender a utilizar Web scrape Hay muchos tutoriales que cubren cómo usar otro paquete de software de raspado web de Python llamado Scrapy. Además de eso, hay varias páginas web de práctica para raspar que podemos utilizar. Podemos comenzar con esta url aquí https://scrapingclub.com/exercise/list_basic/?page=1

práctica de scraping club web scrape

Queremos simplemente extraer el nombre del artículo y el precio de cada entrada y mostrarlo como una lista. Entonces, el primer paso es examinar la fuente de la página para determinar cómo podemos buscar en Html. Parece que tenemos algunas clases de Bootstrap en las que podemos buscar, entre otras cosas.

inspeccionar fuente html para web scrape

Con este conocimiento, aquí está nuestro script de Python para este raspado.

C: pythonvrequestsScriptspython.exe C: /python/vrequests/scraper.py
1: $ 24,99 por el vestido corto
2: $ 29,99 por los pantalones estampados
3: $ 49,99 por el vestido corto de gasa
4: $ 59,99 por el vestido con hombros descubiertos
5: $ 24,99 por la camiseta con cuello en V
6: $ 49,99 por el vestido corto de gasa
7: $ 24,99 por la camiseta con cuello en V
8: $ 24,99 por la camiseta con cuello en V
9: $ 59,99 por el vestido corto de encaje

Proceso terminado con código de salida 0

Web Scraping de más de una página

La URL anterior es una sola página de una colección paginada. Podemos ver eso por la página = 1 en la URL. También podemos configurar un script de Beautiful Soup para raspar más de una página a la vez. Aquí hay un script que raspa todas las páginas vinculadas de la página original. Una vez que se capturan todas esas URL, el script puede enviar una solicitud a cada página individual y analizar los resultados.

scraper.py

Ejecutar ese script luego raspa todas las páginas de una vez y genera una lista grande como esa.

C: pythonvrequestsScriptspython.exe C: /python/vrequests/scraper.py
1: $ 24,99 por el vestido corto
2: $ 29,99 por los pantalones estampados
3: $ 49,99 por el vestido corto de gasa
4: $ 59,99 por el vestido con hombros descubiertos
5: $ 24,99 por la camiseta con cuello en V
6: $ 49,99 por el vestido corto de gasa
7: $ 24,99 por la camiseta con cuello en V
8: $ 24,99 por la camiseta con cuello en V
9: $ 59,99 por el vestido corto de encaje
1: $ 24,99 por el vestido corto
2: $ 29,99 por los pantalones estampados
3: $ 49,99 por el vestido corto de gasa
4: $ 59,99 por el vestido con hombros descubiertos
5: $ 24,99 por la camiseta con cuello en V
6: $ 49,99 por el vestido corto de gasa
7: $ 24,99 por la camiseta con cuello en V
8: $ 24,99 por la camiseta con cuello en V
9: $ 59,99 por el vestido corto de encaje
10: $ 24,99 por el vestido corto
11: $ 29,99 por los pantalones estampados
12: $ 49,99 por el vestido corto de gasa
13: $ 59,99 por el vestido con hombros descubiertos
14: $ 24,99 por la camiseta con cuello en V
15: $ 49,99 por el vestido corto de gasa
16: $ 24,99 por la camiseta con cuello en V
17: $ 24,99 por la camiseta con cuello en V
18: $ 59,99 por el vestido corto de encaje
19: $ 24,99 por el vestido corto
20: $ 29,99 por los pantalones estampados
21: $ 49,99 por el vestido corto de gasa
22: $ 59,99 por el vestido sin hombros
23: $ 24,99 por la camiseta con cuello en V
24: $ 49,99 por el vestido corto de gasa
25: $ 24,99 por la camiseta con cuello en V
26: $ 24,99 por la camiseta con cuello en V
27: $ 59,99 por el vestido corto de encaje
28: $ 24,99 por el vestido corto
29: $ 29,99 por los pantalones estampados
30: $ 49,99 por el vestido corto de gasa
31: $ 59,99 por el vestido sin hombros
32: $ 24,99 por la camiseta con cuello en V
33: $ 49,99 por el vestido corto de gasa
34: $ 24,99 por la camiseta con cuello en V
35: $ 24,99 por la camiseta con cuello en V
36: $ 59,99 por el vestido corto de encaje
37: $ 24,99 por el vestido corto
38: $ 29,99 por los pantalones estampados
39: $ 49,99 por el vestido corto de gasa
40: $ 59,99 por el vestido sin hombros
41: $ 24,99 por la camiseta con cuello en V
42: $ 49,99 por el vestido corto de gasa
43: $ 24,99 por la camiseta con cuello en V
44: $ 24,99 por la camiseta con cuello en V
45: $ 59,99 por el vestido corto de encaje
46: $ 24,99 por el vestido corto
47: $ 29,99 por los pantalones estampados
48: $ 49,99 por el vestido corto de gasa
49: $ 59,99 por el vestido sin hombros
50: $ 24,99 por la camiseta con cuello en V
51: $ 49,99 por el vestido corto de gasa
52: $ 24,99 por la camiseta con cuello en V
53: $ 24,99 por la camiseta con cuello en V
54: $ 59,99 por el vestido corto de encaje

Proceso terminado con código de salida 0



Python Web Scraping con Beautiful Soup Resumen

Beautiful Soup es una de las pocas bibliotecas disponibles creadas para Web Scraping con Python. Es muy fácil comenzar con Beautiful Soup como vimos en este tutorial. Los scripts de web scraping se pueden usar para recopilar y compilar datos de Internet para varios tipos de proyectos de análisis de datos, o cualquier otra cosa que se le ocurra.