Existen principalmente dos formas de extraer datos de un sitio web:
- Utilice la API del sitio web (si existe). Por ejemplo, Facebook tiene la API Facebook Graph que permite la recuperación de datos publicados en Facebook.
- Acceda al HTML de la página web y extraiga información/datos útiles de ella. Esta técnica se llama raspado web o recolección web o extracción de datos web.
Este artículo analiza los pasos involucrados en el web scraping utilizando la implementación de un marco de Web Scraping de Python llamado Beautiful Soup. Pasos involucrados en el web scraping:
- Envíe una solicitud HTTP a la URL de la página web a la que desea acceder. El servidor responde a la solicitud devolviendo el contenido HTML de la página web. Para esta tarea, utilizaremos una biblioteca HTTP de terceros para solicitudes de Python.
- Una vez que hemos accedido al contenido HTML, nos queda la tarea de analizar los datos. Dado que la mayoría de los datos HTML están anidados, no podemos extraer datos simplemente mediante el procesamiento de cadenas. Se necesita un analizador que pueda crear una estructura de árbol/anidada de los datos HTML. Hay muchas bibliotecas de analizadores HTML disponibles, pero la más avanzada es html5lib.
- Ahora, todo lo que tenemos que hacer es navegar y buscar en el árbol de análisis que creamos, es decir, recorrido del árbol. Para esta tarea, usaremos otra biblioteca de Python de terceros, Hermosa sopa . Es una biblioteca de Python para extraer datos de archivos HTML y XML.
Paso 1: instalar las bibliotecas de terceros necesarias
- La forma más sencilla de instalar bibliotecas externas en Python es utilizar pip. pepita es un sistema de administración de paquetes que se utiliza para instalar y administrar paquetes de software escritos en Python. Todo lo que necesitas hacer es:
pip install requests pip install html5lib pip install bs4>
- Otra forma es descargarlos manualmente desde estos enlaces:
Paso 2: acceder al contenido HTML desde la página web
Pitón
instancia de java
import> requests> URL>=> 'https:>/>/>www.techcodeview.com>/>data>->structures>/>'> r>=> requests.get(URL)> print>(r.content)> |
>
>
Intentemos comprender este fragmento de código.
- En primer lugar, importe la biblioteca de solicitudes.
- Luego, especifique la URL de la página web que desea extraer.
- Envíe una solicitud HTTP a la URL especificada y guarde la respuesta del servidor en un objeto de respuesta llamado r.
- Ahora, como print r.content para obtener el contenido HTML sin formato de la página web. Es de tipo 'cadena'.
Nota: A veces puede aparecer el error No aceptado, así que intente agregar un agente de usuario del navegador como se muestra a continuación. Encuentre su agente de usuario según el dispositivo y el navegador desde aquí https://deviceatlas.com/blog/list-of-user-agent-strings
Python3
headers>=> {>'User-Agent'>:>'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246'>}> # Here the user agent is for Edge browser on windows 10. You can find your browser user agent from the above given link.> r>=> requests.get(url>=>URL, headers>=>headers)> print>(r.content)> |
>
>
Paso 3: analizar el contenido HTML
xor c++
Pitón
#This will not run on online IDE> import> requests> from> bs4>import> BeautifulSoup> > URL>=> 'http:>/>/>www.values.com>/>inspirational>->quotes'> r>=> requests.get(URL)> > soup>=> BeautifulSoup(r.content,>'html5lib'>)># If this line causes an error, run 'pip install html5lib' or install html5lib> print>(soup.prettify())> |
>
centrar imágenes en css
>
Lo realmente bueno de la biblioteca BeautifulSoup es que está construida sobre las bibliotecas de análisis HTML como html5lib, lxml, html.parser, etc. Por lo tanto, el objeto BeautifulSoup y la biblioteca del analizador se pueden crear al mismo tiempo. En el ejemplo anterior,
soup = BeautifulSoup(r.content, 'html5lib')>
Creamos un objeto BeautifulSoup pasando dos argumentos:
- r.content: es el contenido HTML sin formato. html5lib: especificando el analizador HTML que queremos usar.
Ahora sopa.prettify() está impreso, proporciona la representación visual del árbol de análisis creado a partir del contenido HTML sin formato. Paso 4: buscar y navegar por el árbol de análisis Ahora, nos gustaría extraer algunos datos útiles del contenido HTML. El objeto de sopa contiene todos los datos de la estructura anidada que podrían extraerse mediante programación. En nuestro ejemplo, estamos raspando una página web que consta de algunas citas. Entonces, nos gustaría crear un programa para guardar esas citas (y toda la información relevante sobre ellas).
Pitón
#Python program to scrape website> #and save quotes from website> import> requests> from> bs4>import> BeautifulSoup> import> csv> > URL>=> 'http:>/>/>www.values.com>/>inspirational>->quotes'> r>=> requests.get(URL)> > soup>=> BeautifulSoup(r.content,>'html5lib'>)> > quotes>=>[]># a list to store quotes> > table>=> soup.find(>'div'>, attrs>=> {>'id'>:>'all_quotes'>})> > for> row>in> table.findAll(>'div'>,> >attrs>=> {>'class'>:>'col-6 col-lg-3 text-center margin-30px-bottom sm-margin-30px-top'>}):> >quote>=> {}> >quote[>'theme'>]>=> row.h5.text> >quote[>'url'>]>=> row.a[>'href'>]> >quote[>'img'>]>=> row.img[>'src'>]> >quote[>'lines'>]>=> row.img[>'alt'>].split('>#')[0]> >quote[>'author'>]>=> row.img[>'alt'>].split('>#')[1]> >quotes.append(quote)> > filename>=> 'inspirational_quotes.csv'> with>open>(filename,>'w'>, newline>=>'') as f:> >w>=> csv.DictWriter(f,[>'theme'>,>'url'>,>'img'>,>'lines'>,>'author'>])> >w.writeheader()> >for> quote>in> quotes:> >w.writerow(quote)> |
>
>
Antes de continuar, le recomendamos que revise el contenido HTML de la página web que imprimimos usando el método sopa.prettify() e intente encontrar un patrón o una forma de navegar hasta las comillas.
- Se observa que todas las comillas están dentro de un contenedor div cuya identificación es 'all_quotes'. Entonces, encontramos ese elemento div (denominado tabla en el código anterior) usando encontrar() método :
table = soup.find('div', attrs = {'id':'all_quotes'})> - El primer argumento es la etiqueta HTML que desea buscar y el segundo argumento es un elemento de tipo diccionario para especificar los atributos adicionales asociados con esa etiqueta. encontrar() El método devuelve el primer elemento coincidente. Puedes intentar imprimir tabla.prettify() para tener una idea de lo que hace este fragmento de código.
- Ahora, en el elemento de la tabla, se puede notar que cada cita está dentro de un contenedor div cuya clase es cita. Entonces, iteramos a través de cada contenedor div cuya clase es quote. Aquí utilizamos el método findAll(), que es similar al método find en términos de argumentos, pero devuelve una lista de todos los elementos coincidentes. Cada cita ahora se repite usando una variable llamada fila. Aquí hay una fila de muestra de contenido HTML para una mejor comprensión:
Ahora considere este fragmento de código:
for row in table.find_all_next('div', attrs = {'class': 'col-6 col-lg-3 text-center margin-30px-bottom sm-margin-30px-top'}): quote = {} quote['theme'] = row.h5.text quote['url'] = row.a['href'] quote['img'] = row.img['src'] quote['lines'] = row.img['alt'].split(' #')[0] quote['author'] = row.img['alt'].split(' #')[1] quotes.append(quote)> - Creamos un diccionario para guardar toda la información sobre una cotización. Se puede acceder a la estructura anidada mediante notación de puntos. Para acceder al texto dentro de un elemento HTML, utilizamos .texto :
quote['theme'] = row.h5.text>
- Podemos agregar, eliminar, modificar y acceder a los atributos de una etiqueta. Esto se hace tratando la etiqueta como un diccionario:
quote['url'] = row.a['href']>
- Por último, todas las citas se agregan a la lista llamada citas.
- Finalmente, nos gustaría guardar todos nuestros datos en algún archivo CSV.
filename = 'inspirational_quotes.csv' with open(filename, 'w', newline='') as f: w = csv.DictWriter(f,['theme','url','img','lines','author']) w.writeheader() for quote in quotes: w.writerow(quote)>
- Aquí creamos un archivo CSV llamado Inspirational_quotes.csv y guardamos todas las citas que contiene para cualquier uso posterior.
Entonces, este fue un ejemplo simple de cómo crear un web scraper en Python. Desde aquí, puedes intentar eliminar cualquier otro sitio web de tu elección. En caso de alguna consulta, publíquela a continuación en la sección de comentarios.
puerto de escucha
Nota : Web Scraping se considera ilegal en muchos casos. También puede hacer que un sitio web bloquee permanentemente su IP. Este blog es una contribución de Nikhil Kumar .
Ahora considere este fragmento de código: