1
votes

I am trying to scrape a restaurant's menu. The thing is this website is quite different from the many others I scraped some other time, and I am finding difficulties scraping it. The name of the dishes is not under a div class or so, but it is the text under a "li". I want to get the name of the dish, the description, and the price. The website is kenkosushi.com.ar/menu

This is my actual code:

from selenium import webdriver
from bs4 import BeautifulSoup
import pandas as pd

driver = webdriver.Chrome("/Users/mateo/Downloads/chromedriver")

products=[] #List to store name of the product
prices=[] #List to store price of the product
descriptions=[] #List to store description of the product
driver.get('https://www.kenkosushi.com.ar/menu/')

content = driver.page_source
soup = BeautifulSoup(content)
for li in soup.find_all('li'):
    name=li.get_text()
    price=li.find('span', attrs={'class':'price'})
    descriptions=li.find('div', attrs={'class':'detail'})
products.append(name)
prices.append(price)
descriptions.append(description) 

df = pd.DataFrame({'Product Name':products,'Price':prices,'Description':descriptions}) 
df.to_csv('products.csv', index=False, encoding='utf-8')

The error I am getting is that my lists are empty, so I am clearly doing something wrong. But I cannot find what. I hope you can help.

Thank you all in advance!

2

2 Answers

1
votes

First you declare theree variables as list, but after you assign .find() they no longer are a list because it Dosen't return a list! find_all does:

content = driver.page_source
soup = BeautifulSoup(content)
for li in soup.find_all('li'):
    name.append(li.get_text())
    price.append(li.find('span', attrs={'class':'price'}).text)
    descriptions.append(li.find('div', attrs={'class':'detail'}).text)

df = pd.DataFrame({'Product Name':products,'Price':prices,'Description':descriptions}) 
df.to_csv('products.csv', index=False, encoding='utf-8')
1
votes

Yes it is a little unorthodox, and there seems to be a special case under "MIX CLASSICS" items, that doesnt follow the same pattern as the others and donesn't have a description. So you'll have to handle that some way (which I did). But also with the Toppings layout (which I hadn't manipulated...you can do that part how you want). But this should get you going in the right direction. Also, no need to use Selenium.

Code:

from bs4 import BeautifulSoup
import requests
import pandas as pd

url="https://www.kenkosushi.com.ar/menu/"
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'}
response = requests.get(url, headers=headers)


# Make a GET request to fetch the raw HTML content
html_content = response.text

# Parse the html content
soup = BeautifulSoup(html_content, 'html.parser')
alpha = soup.find_all("ul", attrs={"class": "menu"})


rows = []
for beta in alpha:
    category = beta.find_previous('h2').text.strip()
    items = beta.find_all('li')
    for each in items:
        
        if 'MIX CLASSIC' in each.text:
            special_cases = each.find_all('span',{'class':'price'})
            for each1 in special_cases:
                product = each1.previous_sibling.strip()
                price = each1.text
                try:
                    desc = each.find('div',{'class':'detail'}).text.strip()
                except:
                    desc = ''
                    
                row = {'category':category,
                   'product':product,
                   'price':price,
                   'description':desc}
                rows.append(row)
        
        else:
            product = each.text.split('$')[0].strip()
            price = each.find('span',{'class':'price'}).text.strip()
            try:
                desc = each.find('div',{'class':'detail'}).text.strip()
            except:
                desc = ''
            
            row = {'category':category,
                   'product':product,
                   'price':price,
                   'description':desc}
            rows.append(row)
        
df = pd.DataFrame(rows)
df.to_csv('products.csv', index=False, encoding='utf-8')

Output:

print (df.to_string())
               category                                                    product  price                                                                                                                                                                                  description
0              Entradas                                        TIRADITOS DE SALMÓN   $490                                                                                                                                          Láminas de salmón, salsa de maracuyá, batata frita.
1              Entradas                                 TIRADITO DE PESCADO BLANCO   $490                                                                                                                                    Láminas de pescado blanco, salsa maracuyá y batata frita.
2              Entradas                                  TIRADITO NIKKEI DE SALMÓN   $490                                                                                                                                                  Laminas de salmón, salsa nikkei y cilantro.
3              Entradas                          TIRADITO NIKKEI DE PESCADO BLANCO   $490                                                                                                                                          Láminas de pescado blanco, salsa nikkei y cilantro.
4              Entradas                                        TIRADITO ACEVICHADO   $490                                                                                                                                                Pescado blanco y salmón con salsa acevichado.
5              Entradas                                                  HARUMAKIS   $210                                                                                                                                   4 Arrolladitos Primavera . Acompañado con Salsa Agridulce.
6              Entradas                                           LANGOSTINO FURAI   $470                                                                                                                          Langostinos jumbo apanados en panko. Servidos con aderezo especial.
7                Kenkos                                                    CLASSIC   $540                                                                                                                                    Base de arroz japonés, salmón, palta y queso Philadelphia
8                Kenkos                                                     CRISPY   $480                                                                                                                  Base de arroz japonés, salmón panizado en panko, palta y queso Philadelphia
9                Kenkos                                                     SHRIMP   $540                                                                                                                           Base de arroz japonés, langostinos panizados, palta y Philadelphia
10               Kenkos                                                   TERIYAKI   $440                                                                                                                                  Base de arroz japonés, pollo teriyaki, palta y Philadelphia
11               Kenkos                                                     VEGGIE   $400                                                                                                         Base de clásico arroz japonés combinado con palta, vegetales frescos y Philadelphia.
12               Kenkos                                                      GRILL   $400                                                   Base de clásico arroz japonés combinado con salmón grillado, procesado y especiado con verdeo, la palta mejor seleccionada y Philadelphia.
13               Kenkos                                       MIX CLASSIC / CRISPY   $540                                                                                                                                                                                             
14               Kenkos                                        MIX CLASSIC /SHRIMP   $540                                                                                                                                                                                             
15               Kenkos                                                   Toppings    $50                                                                                                                                                                                             
16               Kenkos            (Batata Frita, Papa Frita)\nAGRANDÁ TU KENKO110    110                                                                                                                                                                                             
17               Kenkos                                        AGRANDÁ TU KENKO110    110                                                                                                                                                                                             
18                Rolls                               CALIFORNIA ROLL(10 UNIDADES)   $400                                                                                                                                                              Kanikama, palta y Philadelphia.
19                Rolls                                    TUNA ROLL (10 UNIDADES)   $400                                                                                                                                                                  Atún, Philadelphia y palta.
20                Rolls                                NEW YORK ROLL (10 UNIDADES)   $460                                                                                                                                                                      Salmón, palta y sésamo.
21                Rolls                                   PHILA ROLL (10 UNIDADES)   $460                                                                                                                                                           Salmón, queso, negui y ciboulette.
22                Rolls                               NEW PHILA ROLL (10 UNIDADES)   $460                                                                                                                                                                 Salmón, palta, Philadelphia.
23                Rolls                            MAKI PHILADELPHIA (10 UNIDADES)   $460                                                                                                                                                                       Salmón y Philadelphia.
24                Rolls                                  VEGGIE ROLL (10 UNIDADES)   $400                                                                                                                          Hongos shiitake, Philadelphia, palta, tzuma de zucchini y zanahoria
25                Rolls                                 SENTOIA ROLL (10 UNIDADES)   $460                                                                                                                                                           Salmón y palta coronado en sentoia
26                Rolls                                   KENKO ROLL (10 UNIDADES)   $460                                                                    Langostino apanado con panko y Philadelphia. Cubierto por una lonja de salmón, coronado con batata frita y salsa maracuyá
27                Rolls                                   GREAT ROLL (10 UNIDADES)   $475                                                                                                                                                     Salmón, langostino, Philadelphia y palta
28                Rolls                               JUVENTUS ROLL  (10 UNIDADES)   $475                                                                                                                                                         Salmón crispy, Philadelphia y palta.
29                Rolls                                   MANGO ROLL (10 UNIDADES)   $460                                                                                                                               Salmón, Philadelphia y palta. Coronado con una lonja de mango.
30                Rolls                                ROLL DOS SAKE (10 UNIDADES)   $475                                                                                       Palta con un tartar de salmón nikkei con ciboulette, cobertura de salmón, flameado con salsa oriental.
31                Rolls                              ROLL ACEVICHADO (10 UNIDADES)   $460                                                                                   Langostinos apanados, palta. Cubiertos con salmón y salsa acevichada con chiffonade de albahaca y cilantro
32         Nuevos Rolls                                          CAPRESSE HOT ROLL   $475                                                                                                                                                   Salmón, queso especial, tomate y albahaca.
33         Nuevos Rolls                                            SALMÓN HOT ROLL   $475                                                                                                                                                                Salmón , Philadelphia, palta.
34         Nuevos Rolls                                               EBI HOT ROLL   $475                                                                                                                                                            Langostinos, Philadelphia, palta.
35         Nuevos Rolls                                          BUENOS AIRES ROLL   $475                                                                                                                Salmón, langostinos, Philadelphia y palta. Cubierto de salmón y sésamo mixto.
36         Nuevos Rolls                                               SHIROMI ROLL   $475                                                                                                                Langostinos rebozados y palta. Cubierto de pescado blanco y salsa acevichada.
37         Nuevos Rolls                                                TAMAGO ROLL   $475                                                                                                                                       Lámina de Tamago, salmón, Philadelphia, palta y arroz.
38         Nuevos Rolls                                                 IBIZA ROLL   $475                                                                                                Langostino furai, Philadelphia, palta y arroz. Cubierto en salmón y salsa especial huancaina.
39         Nuevos Rolls                                                 TAGNA ROLL   $475                                                                                                                                               Salmón, Philadelphia, palta y arroz. Sin alga.
40         Nuevos Rolls                                               TEMPURA ROLL   $475                                                                                                                    Philadelphia y langostinos en tempura. Cubierto con palta y salsa nikkei.
41         Nuevos Rolls                                                 TOKIO ROLL   $475                                                                        Langostino al vapor, Philadelphia, verdeo y palta. Cubierto con salmón flameado, ron, azúcar negra y salsa maracuyá .
42         Nuevos Rolls                                                  INCA ROLL   $475                                                                                                           Queso nikkei, langostino rebozado. Cubierto con pescado blanco y salsa acevichada.
43         Nuevos Rolls                     NIGUIRI DE PESCADO BLANCO (4 UNIDADES)   $245                                                                                                                                               Cortes de pescado blanco sobre canape de arroz
44         Nuevos Rolls                             NIGUIRI DE SALMÓN (4 UNIDADES)   $245                                                                                                                                                       Cortes de salmón sobre canapé de arroz
45         Nuevos Rolls                    NIGUIRI DE SALMÓN FLAMEADO (4 UNIDADES)   $245                                                                                                                                           Cortes de salmón sobre canapé de arroz. Flameados.
46         Nuevos Rolls                         NIGUIRI DE LANGOSTINO (4 UNIDADES)   $245                                                                                                                                             Langostino jumbo con cola sobre canapé de arroz.
47         Nuevos Rolls                                 GEISHA SALMÓN (4 UNIDADES)   $245                                                                                                                                          Pieza de salmón por fuera, palta y queso por dentro
48         Nuevos Rolls                                SASHIMI SALMÓN (4 UNIDADES)   $245                                                                                                                                                                     Cortes del salmón rosado
49         Nuevos Rolls                               SASHIMI SHIROMI (4 UNIDADES)   $245                                                                                                                                                            Cortes selectos de pescado blanco
50         Nuevos Rolls                                 SASHIMI SPACE (4 UNIDADES)   $245                                                                                                                                              Cortes selectos de salmón sellado con togarashi
51  Combinados de sushi                                                15 HOT ROLL   $630                                                                                                                                                              A eleccion del chef, calientes.
52  Combinados de sushi                                            15 PIEZA SALMÓN   $690                                                                                                                                    5 Dos Sake, 5 New Phila, 3 Niguiri de Salmón y 2 Geishas.
53  Combinados de sushi                                           30 PIEZAS SALMÓN  $1350                                                                                        5 Tagna Roll, 5 New Phila, 3 Niguiri Flameado, 2 Geishas\n5 Dos Sake, 5 Juventus Roll y 5 Mango Roll.
54  Combinados de sushi                                           45 PIEZAS SALMÓN  $1900                        5 Tagna Rolla, 5 New Phila, 2 Niguiri Flameado, 2 Niguiri Salmon\n5 Dos Saje, 5 Mango Roll, 2 Sashimi Salmón, 5 Juventus Rol\n5 Tamago Rol, 4 Geishas y 5 Phila Roll.
55  Combinados de sushi                                          15 PIEZAS PREMIUM   $720                                                                                             5 Kenko Roll, 5 Shiromi Roll, 2 Niguiri Langostino,\n2 Sashimi Space y Niguiri de Pescado Blanco
56  Combinados de sushi                                          30 PIEZAS PREMIUM  $1390                                                                             5 Kenko Roll, 5 Shiromi Roll, 5 Tagna Roll, 5 Tempura Roll, 2 Niguiri Langostino,  3 Sashimi Space, 5 Tokio Roll
57  Combinados de sushi                                          45 PIEZAS PREMIUM  $2000  5 Kenko Roll, 5 Shiromi Roll, 5 Tagna Roll, 5 Tempura Roll\n3 Niguiri de Pescado Blanco, 2 Sashimi Space 2 Niguiri Furay, 3 Niguiri Langostino\n5 Tokio Roll, 5 Tamago Roll y 5 Mango Roll.
58              Temakis                                              TEMAKI SALMÓN   $280                                                                                                                                    Cono de Alga Nori relleno de Salmón, Philadelphia y Palta
59              Temakis                                              TEMAKI SHRIMP   $280                                                                                                                          Cono de Alga Nori relleno de Langostino Furai, Philadelphia y Palta
60              Temakis                                              TEMAKI CRISPY   $280                                                                                                                            Cono de Alga Nori relleno de salmón crispy, Philadelphia y palta.
61             Ceviches                                          CEVICHE DE SALMÓN   $550                                                                                                                Salmón, cilantro, ají limo, cebolla morada, leche de tigre y salsa de ostras.
62             Ceviches                                            CEVICHE CLÁSICO   $550                                                                                                                         Pescado blanco, cilantro, ají limo, cebolla morada y leche de tigre.
63             Ceviches                                           CEVICHE JALAPEÑO   $550                                                                                                       Pescado blanco, cilantro, ají limo, cebolla morada, crema de jalapeño y leche de tigre
64             Ceviches                                           WOK DE VEGETALES   $510                                                                                                                                    Arroz, mix de vegetales, salsa de soja y salsa de ostras.
65             Ceviches                                               WOK DE POLLO   $510                                                                                                                             Arroz, mix de vegetales, pollo, salsa de soja y salsa de ostras.
66             Ceviches                                              WOK DE SALMÓN   $530                                                                                                                           Arroz, mix de vegetales , salmón, salsa de soja y salsa de ostras.
67             Ceviches                                         WOK DE LANGOSTINOS   $530                                                                                                                        Arroz, mix de vegetales, langostinos, salsa de soja, salsa de ostras.
68             Ceviches  SALMÓN A LA PLANCHA CON GUARNICION DE VEGETALES SALTEADOS   $830                                                                                                                                  Mix de vegetales , salmón, salsa de soja y salsa de ostras.
69              Bebidas                                            COCA COLA 354ML   $100                                                                                                                                                                                             
70              Bebidas                                     COCA COLA LIGHT 354 ML   $100                                                                                                                                                                                             
71              Bebidas                                      COCA COLA ZERO 354 ML   $100                                                                                                                                                                                             
72              Bebidas                                              SPRITE 354 ML   $100                                                                                                                                                                                             
73              Bebidas                                   SPRITE SIN AZUCAR 354 ML   $100                                                                                                                                                                                             
74              Bebidas                                                     LEVITÉ    $90                                                                                                                                                                                             
75              Bebidas                                                LEVITÉ CERO    $90                                                                                                                                                                                             
76              Bebidas                                                        H20    $90                                                                                                                                                                                             
77              Bebidas                                                       AGUA    $80                                                                                                                                                                                             
78              Bebidas                                               AGUA CON GAS    $80                                                                                                                                                                                             
79               Salsas                                                   TERIYAKI    $60                                                                                                                                                        Soja reducida con azúcares y especias
80               Salsas                                                      KENKO    $60                                                                                                                                                 Una perfecta combinacion de sabores peruanos
81               Salsas                                               BUENOS AIRES    $60                                                                                                                                                  Soja reducida con azúcares y sesamo tostado
82               Salsas                                                  AGRIDULCE    $60                                                                                                                                  Suave equilibro de tomates seleccionados y duraznos frescos