? Estas son sus opciones:","Crunchbase","Quiénes somos","Gracias a todos por el increíble apoyo.","Enlaces rápidos","Programa de afiliados","Premium","ProxyScrape prueba premium","Tipos de proxy","Países sustitutos","Casos de uso de proxy","Importante","Política de cookies","Descargo de responsabilidad","Política de privacidad","Condiciones generales","Redes sociales","Facebook","LinkedIn","Twitter","Quora","Telegrama","Discordia","\n © Copyright 2024 - Thib BV | Brugstraat 18 | 2812 Mechelen | Bélgica | IVA BE 0749 716 760\n"]}
El web scraping es el arte de extraer datos de Internet y utilizarlos con fines útiles. A veces también se conoce como extracción de datos web o recolección de datos web. Para los novatos, es lo mismo que copiar datos de Internet y almacenarlos localmente. Sin embargo, es un proceso manual. Web scraping
El web scraping es el arte de extraer datos de Internet y utilizarlos con fines útiles. A veces también se conoce como extracción de datos web o recolección de datos web. Para los novatos, es lo mismo que copiar datos de Internet y almacenarlos localmente. Sin embargo, es un proceso manual. El web scraping es un proceso automatizado que funciona con la ayuda de rastreadores web. Los rastreadores web se conectan a Internet mediante el protocolo HTTP y permiten al usuario obtener datos de forma automatizada. Se puede considerar Internet como un suelo enriquecido y los datos como el nuevo petróleo, mientras que el web scraping es la técnica para extraer ese petróleo.
La capacidad de raspar y analizar los datos de Internet se ha convertido en una técnica esencial tanto si eres un científico de datos, un ingeniero o un vendedor. Puede haber varios casos de uso en los que el web scraping puede ser de gran ayuda. En este artículo, vamos a raspar los datos de Amazon utilizando Python. Por último, también analizaremos los datos raspados y veremos lo importante que es para cualquier persona normal, científico de datos o persona que dirija una tienda de comercio electrónico.
Sólo una pequeña precaución: Si eres nuevo en Python y web scraping, este artículo puede ser un poco más difícil de entender para ti. Yo sugeriría ir a través de los artículos de nivel introductorio en ProxyScrape y luego venir a éste.
Empecemos con el código.
En primer lugar, importaremos todas las bibliotecas necesarias para el código. Estas librerías se utilizarán para el scraping y la visualización de datos. Si quieres conocer los detalles de cada una, puedes visitar su documentación oficial.
importar pandas como pd
import numpy como np
import matplotlib.pyplot como plt
import seaborn as sns
matplotlib en línea
import re
import time
from datetime import datetime
import matplotlib.dates as mdates
import matplotlib.ticker como ticker
from urllib.request import urlopen
from bs4 import BeautifulSoup
importar peticiones
Ahora vamos a scrapear la información útil de los libros más vendidos de Amazon. La URL que vamos a raspar es:
https://www.amazon.in/gp/bestsellers/books/ref=zg_bs_pg_’+str(pageNo)+’?ie=UTF8&pg=’+str(pageNo)
Como necesitamos acceder a todas las páginas, haremos un bucle por cada una de ellas para obtener el conjunto de datos necesario.
Para conectarse a la URL y obtener el contenido HTML, se requiere lo siguiente,
Algunas de las etiquetas importantes bajo las que residirán nuestros datos importantes son,
Si inspecciona la página dada, verá la etiqueta padre y sus elementos correspondientes.
Si desea inspeccionar un atributo en particular, vaya a cada uno de ellos e inspecciónelos. Encontrará algunos atributos importantes para el autor, nombre del libro, valoración, precio, clientes valorados.
En nuestro código, utilizaremos sentencias if-else anidadas para aplicar conclusiones adicionales a aquellos autores que no estén registrados en amazon.
no_pages = 2
def get_data(pageNo):
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0", "Accept-Encoding":"gzip, deflate", "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "DNT":"1","Connection":"close", "Upgrade-Insecure-Requests":"1"}
r = requests.get('https://www.amazon.in/gp/bestsellers/books/ref=zg_bs_pg_'+str(pageNo)+'?ie=UTF8&pg='+str(pageNo), headers=headers)#, proxies=proxies)
content = r.content
soup = BeautifulSoup(content)
#print(soup)
alls = []
for d in soup.findAll('div', attrs={'class':'a-section a-spacing-none aok-relative'}):
#print(d)
name = d.find('span', attrs={'class':'zg-text-center-align'})
n = name.find_all('img', alt=True)
#print(n[0]['alt'])
author = d.find('a', attrs={'class':'a-size-small a-link-child'})
rating = d.find('span', attrs={'class':'a-icon-alt'})
users_rated = d.find('a', attrs={'class':'a-size-small a-link-normal'})
price = d.find('span', attrs={'class':'p13n-sc-price'})
all1=[]
if name is not None:
#print(n[0]['alt'])
all1.append(n[0]['alt'])
else:
all1.append("unknown-product")
if author is not None:
#print(author.text)
all1.append(author.text)
elif author is None:
author = d.find('span', attrs={'class':'a-size-small a-color-base'})
if author is not None:
all1.append(author.text)
else:
all1.append('0')
if rating is not None:
#print(rating.text)
all1.append(rating.text)
else:
all1.append('-1')
if users_rated is not None:
#print(price.text)
all1.append(users_rated.text)
else:
all1.append('0')
if price is not None:
#print(price.text)
all1.append(price.text)
else:
all1.append('0')
alls.append(all1)
return alls
Esto realizará las siguientes funciones,
for i in range(1, no_pages+1):
results.append(get_data(i))
aplanar = lambda l: [elemento para sublista en l para elemento en sublista]
df = pd.DataFrame(flatten(results),columns=['Nombre del libro','Autor','Valoración','Clientes_Calificados', 'Precio'])
df.to_csv('amazon_products.csv', index=False, encoding='utf-8')
Ahora cargaremos el archivo csv,
df = pd.read_csv("amazon_products.csv")
df.shape
La forma del marco de datos muestra que hay 100 filas y 5 columnas en el archivo CSV.
Veamos las 5 filas del conjunto de datos,
df.head(61)
A continuación realizaremos un preprocesamiento de las columnas ratings, customers_rated y price.
df['Calificación'] = df['Calificación'].apply(lambda x: x.split()[0])
df['Valoración'] = pd.to_numeric(df['Valoración'])
df["Precio "] = df["Precio"].str.replace('₹', '')
df[" Precio"] = df["Precio"].str.replace(',', ' ')
df['Precio'] = df['Precio'].apply(lambda x: x.split('.')[0])
df['Precio'] = df['Precio'].astype(int)
df["Clientes_Calificados" ] = df["Clientes_Calificados"].str.replace(',', '')
df['Clientes_Calificados'] = pd.to_numeric(df['Clientes_Calificados'], errors='ignorar')
df.head()
Si echamos un vistazo a los tipos de dataframe obtenemos,
Hay alguna información incompleta en la salida anterior. Primero contaremos el número de NaN y luego los eliminaremos.
df.replace(str(0), np.nan, inplace=True)
df.replace(0, np.nan, inplace=True)
count_nan = len(df) - df.count()
recuento_nan
df = df.dropna()
Ahora conoceremos a todos los autores con el libro más caro. Nos familiarizaremos con los 20 mejores de ellos.
data = data.sort_values(['Valoración'],axis=0, ascending=False)[:15]
datos
Ahora veremos los libros y autores mejor valorados con respecto a la valoración de los clientes. Filtraremos aquellos autores y libros con menos de 1.000 reseñas, de modo que obtendremos los autores más famosos.
datos = df[df['Calificación_clientes'] > 1000]
datos = datos.ordenar_valores(['Calificación'],eje=0, ascendente=False)[:15]
datos
Visualicemos los libros mejor valorados,
p = figure(x_range=data.iloc[:,0], plot_width=800, plot_height=600, title="Los libros mejor valorados por más de 1000 clientes", toolbar_location=None, tools="")
p.vbar(x=datos.iloc[:,0], top=datos.iloc[:,2], width=0.9)
p.xgrid.grid_line_color = None
p.y_range.start = 0
p.eje_x.orientación_etiqueta_mayor = math.pi/2
mostrar(p)
Cuantas más valoraciones, mayor será la confianza de los clientes. Así que será más convincente y creíble si añadimos los autores y libros más valorados por los clientes.
from bokeh.transform import factor_cmap
from bokeh. models import Leyenda
from bokeh.palettes import Dark2_5 as palette
import itertools
from bokeh. palettes import d3
#colors tiene una lista de colores que se pueden utilizar en los gráficos
colors = itertools.cycle(paleta)
paleta = d3['Categoría20'][20]
index_cmap = factor_cmap('Autor', palette=palette,
factores=datos["Autor"])
p = figure(plot_width=700, plot_height=700, title = "Los mejores autores: Valoración vs. Clientes valorados")
p.scatter('Valoración','Clientes_valorados',source=datos,fill_alpha=0.6, fill_color=index_cmap,size=20,legend='Autor')
p.xaxis.axis_label = 'VALORACIÓN'
p.yaxis.axis_label = ' CLIENTES VALORADOS'
p.legend.location = 'arriba_izquierda'
Mostrar(p)
En este artículo, hemos visto lo que es el web scraping tomando un caso de uso muy importante de extracción de datos de Amazon. No sólo hemos extraído datos de diferentes páginas de Amazon, sino que también hemos visualizado los datos utilizando diferentes bibliotecas de Python. Este artículo fue un artículo de nivel avanzado y puede ser difícil de entender para las personas que son nuevas en el web scraping y visualización de datos. Para ellos, yo sugeriría ir a los artículos del paquete de arranque disponible en ProxyScrape. Web scraping es una técnica muy útil que puede dar un impulso a su negocio. También hay algunas increíbles herramientas de pago disponibles en el mercado, pero ¿por qué pagar cuando se puede codificar su propio raspador. El código que hemos escrito arriba puede no funcionar para todas las páginas web porque la estructura de la página puede diferir. Pero si usted ha entendido los conceptos anteriores, entonces no hay obstáculos para que usted pueda raspar cualquier página web modificando el código de acuerdo a su estructura. Espero que este artículo haya sido interesante para los lectores. Eso es todo. ¡Nos vemos en los próximos!