Web Scraping – Reseñas de clientes de Amazon

En este artículo, vamos a ver cómo podemos raspar la revisión del cliente de Amazon usando Beautiful Soup en Python.

Módulo necesario

  • bs4 :Beautiful Soup (bs4) es una biblioteca de Python para extraer datos de archivos HTML y XML. Este módulo no viene integrado con Python. Para instalar este tipo, escriba el siguiente comando en la terminal.

pip instalar bs4

  • requests :Request le permite enviar requests HTTP/1.1 de manera extremadamente fácil. Este módulo tampoco viene integrado con Python. Para instalar este tipo, escriba el siguiente comando en la terminal.

requests de instalación de pip

Para comenzar con el web scraping, primero tenemos que hacer alguna configuración. Importe todos los módulos necesarios. Obtenga los datos de las cookies para realizar la solicitud a Amazon, sin esto no puede raspar. Cree un encabezado que contenga las cookies de su solicitud, sin cookies no puede extraer datos de Amazon, siempre muestra algún error. Este sitio web le proporcionará un agente de usuario específico.

Pase la URL en la función getdata() (función definida por el usuario) para que solicite una URL, devuelve una respuesta. Estamos usando el método get para recuperar información del servidor dado usando una URL dada.

Sintaxis: 

requests.get(url, argumentos)

Convierta esos datos en código HTML y luego analice el contenido HTML usando bs4.

Sintaxis: sopa = BeautifulSoup(r.content, ‘html5lib’)

Parámetros:

  • r.content : es el contenido HTML sin procesar.
  • html.parser  : especificando el analizador HTML que queremos usar.

Ahora filtre los datos requeridos usando la función de sopa.Find_all.

Programa:

Python3

# import module
import requests
from bs4 import BeautifulSoup
  
HEADERS = ({'User-Agent':
            'Mozilla/5.0 (Windows NT 10.0; Win64; x64) \
            AppleWebKit/537.36 (KHTML, like Gecko) \
            Chrome/90.0.4430.212 Safari/537.36',
            'Accept-Language': 'en-US, en;q=0.5'})
  
# user define function
# Scrape the data
def getdata(url):
    r = requests.get(url, headers=HEADERS)
    return r.text
  
  
def html_code(url):
  
    # pass the url
    # into getdata function
    htmldata = getdata(url)
    soup = BeautifulSoup(htmldata, 'html.parser')
  
    # display html code
    return (soup)
  
  
url = "https://www.amazon.in/Columbia-Mens-wind-\
resistant-Glove/dp/B0772WVHPS/?_encoding=UTF8&pd_rd\
_w=d9RS9&pf_rd_p=3d2ae0df-d986-4d1d-8c95-aa25d2ade606&pf\
_rd_r=7MP3ZDYBBV88PYJ7KEMJ&pd_rd_r=550bec4d-5268-41d5-\
87cb-8af40554a01e&pd_rd_wg=oy8v8&ref_=pd_gw_cr_cartx&th=1"
  
soup = html_code(url)
print(soup)

Producción:

Nota: Esto es solo código HTML o datos sin procesar.

Ahora que la configuración central está hecha, veamos cómo se puede hacer el scraping para un requisito específico.

Raspe el nombre del cliente

Ahora busque la lista de clientes con la etiqueta span donde class_ = a-profile-name. Puede abrir la página web en el navegador e inspeccionar el elemento relevante haciendo clic con el botón derecho, como se muestra en la figura.

Tienes que pasar el nombre de la etiqueta y el atributo con su valor correspondiente a la función find_all().

Código:

Python

def cus_data(soup):
    # find the Html tag
    # with find()
    # and convert into string
    data_str = ""
    cus_list = []
  
    for item in soup.find_all("span", class_="a-profile-name"):
        data_str = data_str + item.get_text()
        cus_list.append(data_str)
        data_str = ""
    return cus_list
  
  
cus_res = cus_data(soup)
print(cus_res)

Producción:

[‘Amazing’, ‘Robert’, ‘D. Kong’, ‘Alexey’, ‘Charl’, ‘RBostillo’]

Raspe la revisión del usuario:

Ahora encuentre la revisión del cliente como los mismos métodos anteriores. Encuentre el nombre de clase único con una etiqueta específica, aquí usamos la etiqueta div.

Código:

Python3

def cus_rev(soup):
    # find the Html tag
    # with find()
    # and convert into string
    data_str = ""
  
    for item in soup.find_all("div", class_="a-expander-content \
    reviewText review-text-content a-expander-partial-collapse-content"):
        data_str = data_str + item.get_text()
  
    result = data_str.split("\n")
    return (result)
  
  
rev_data = cus_rev(soup)
rev_result = []
for i in rev_data:
    if i is "":
        pass
    else:
        rev_result.append(i)
rev_result

Producción:

Información de producción de raspado

Aquí rasparemos la información del producto, como el nombre del producto, el número ASIN, el peso y la dimensión. Al hacer esto, usaremos la etiqueta span y con un nombre de clase único específico.

Código:

Python3

def product_info(soup):
  
    # find the Html tag
    # with find()
    # and convert into string
    data_str = ""
    pro_info = []
  
    for item in soup.find_all("ul", class_="a-unordered-list a-nostyle\
    a-vertical a-spacing-none detail-bullet-list"):
        data_str = data_str + item.get_text()
        pro_info.append(data_str.split("\n"))
        data_str = ""
    return pro_info
  
  
pro_result = product_info(soup)
  
# Filter the required data
for item in pro_result:
    for j in item:
        if j is "":
            pass
        else:
            print(j)

Producción:

Imagen de revisión de raspado:

Aquí extraeremos el enlace de la imagen de la revisión del producto utilizando los mismos métodos que los anteriores. El nombre de la etiqueta y el atributo de la etiqueta se pasan a findAll() como se indicó anteriormente.

Código:

Python3

def rev_img(soup):
  
    # find the Html tag
    # with find()
    # and convert into string
    data_str = ""
    cus_list = []
    images = []
    for img in soup.findAll('img', class_="cr-lightbox-image-thumbnail"):
        images.append(img.get('src'))
    return images
  
  
img_result = rev_img(soup)
img_result

Producción:

Guardando detalles en un archivo CSV:

Aquí guardaremos los detalles en el archivo CSV, convertiremos los datos en un marco de datos y luego los exportaremos al CSV. Veamos cómo exportar un marco de datos de Pandas a un archivo CSV. Usaremos la función to_csv() para guardar un DataFrame como un archivo CSV.

Sintaxis: to_csv(parámetros)
Parámetros:

  • path_or_buf: ruta del archivo u objeto; si no se proporciona ninguno, el resultado se devuelve como una string.

Código:

Python3

import pandas as pd
  
# initialise data of lists.
data = {'Name': cus_res,
        'review': rev_result}
  
# Create DataFrame
df = pd.DataFrame(data)
  
# Save the output.
df.to_csv('amazon_review.csv')

Producción:

Publicación traducida automáticamente

Artículo escrito por kumar_satyam y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *