Web Scraping es la técnica de extraer grandes cantidades de datos de sitios web donde los datos extraídos se guardan en un archivo local en su computadora. La forma más simple de Web Scrapping es copiar y pegar manualmente datos de una página web en un archivo de texto o una hoja de cálculo. A veces, esta es la única solución cuando los sitios web establecen barreras. Pero en la mayoría de los casos, se requiere una gran cantidad de datos que es difícil de obtener para un ser humano. Por ello, contamos con herramientas de Web Scrapping para automatizar el proceso. Una de esas herramientas de Web Scrapping es BeautifulSoup .
BeautifulSoup es una biblioteca de Python Web Scrapping para extraer datos y analizar archivos HTML y XML. Para instalar BeautifulSoup, escriba el siguiente comando en la terminal.
pip install BeautifulSoup4
BeautifulSoup es una herramienta para el análisis de HTML, pero necesitaremos un cliente web para obtener algo de Internet.
Esto se puede lograr en Python usando el paquete urllib .
En este artículo, nuestra tarea será:
- Recoge el nombre del producto y el precio.
- Guarde los datos recopilados en formato .csv.
Como ejemplo, recogeremos el título y el precio del libro de la web: BookToScrape
Acercarse
- Importe las bibliotecas: BeautifulSoup y urllib.
- Lea el enlace HTML usando urllib.
- Permitir el análisis del enlace usando Beautiful Soup.
- Busque la etiqueta que contiene todos los productos de esa página web en particular y extráigala.
- Busque la etiqueta que muestra el nombre y el precio del libro y extráigala.
- Con toda la información extraída, imprima y guarde todo en un archivo csv.
A continuación se muestra la implementación.
Python3
# import web grabbing client and # HTML parser from urllib.request import urlopen as uReq from bs4 import BeautifulSoup as soup # variable to store website link as string myurl = 'http://books.toscrape.com/index.html' # grab website and store in variable uclient uClient = uReq(myurl) # read and close HTML page_html = uClient.read() uClient.close() # call BeautifulSoup for parsing page_soup = soup(page_html, "html.parser") # grabs all the products under list tag bookshelf = page_soup.findAll( "li", {"class": "col-xs-6 col-sm-4 col-md-3 col-lg-3"}) # create csv file of all products filename = ("Books.csv") f = open(filename, "w") headers = "Book title, Price\n" f.write(headers) for books in bookshelf: # collect title of all books book_title = books.h3.a["title"] # collect book price of all books book_price = books.findAll("p", {"class": "price_color"}) price = book_price[0].text.strip() print("Title of the book :" + book_title) print("Price of the book :" + price) f.write(book_title + "," + price+"\n") f.close()
Producción :
Archivo CSV:
Expliquemos el código anterior. En este ejemplo, un solo libro y su información están contenidos bajo la etiqueta <li> . Así que usamos –
- La función findAll() busca todas las etiquetas li con clase (puede ser ID si es su ID) denominadas «col-xs-6 col-sm-4 col-md-3 col-lg-3» y las almacena en la variable estantería _
estantería = page_soup.findAll(“li”, {“clase”: “col-xs-6 col-sm-4 col-md-3 col-lg-3”})
- Almacenará toda la información sobre esa clase <li> que son los libros. Puede ver en la imagen de arriba, cada etiqueta y clase <li> : “col-xs-6 col-sm-4 col-md-3 col-lg-3” representa un libro.
- Ahora que tenemos todos nuestros libros, debemos seleccionar qué información en particular debemos extraer de cada libro y esa es Título y Precio .
- Puede ver en la imagen de arriba, el título de cada libro está debajo de la etiqueta <h3> que está debajo de la etiqueta <a> con ‘título’. Entonces, la función anterior se usa para extraer el título de cada libro.
book_title = books.h3.a["title"]
- Para el precio, podemos ver que está bajo la etiqueta <p> en la clase: «price_color» , por lo que usamos findAll()
book_price = books.findAll("p", {"class" : "price_color"}) price = book_price[0].text.strip()
- El índice 0 toma el precio del primer libro de la página y lo almacena en precio variable . La función .text.strip() recopila solo el texto y las tiras de cualquier espacio hacia adelante y hacia atrás.
Publicación traducida automáticamente
Artículo escrito por akshay_sharma08 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA