【问题标题】:How can I scrape all <li> text from a web with Python Selenium and BeautifulSoup?如何使用 Python Selenium 和 BeautifulSoup 从网络上抓取所有 <li> 文本?
【发布时间】:2020-11-17 02:00:53
【问题描述】:

我正在尝试抓取餐厅的菜单。问题是这个网站与我之前抓取的许多其他网站完全不同,而且我在抓取它时遇到了困难。菜名不在一个div类左右,而是一个“li”下的文字。我想得到菜的名称、描述和价格。该网站是kenkosushi.com.ar/menu

这是我的实际代码:

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')

我得到的错误是我的列表是空的,所以我显然做错了什么。但我找不到什么。我希望你能帮忙。

提前谢谢大家!

【问题讨论】:

    标签: python python-3.x selenium web-scraping beautifulsoup


    【解决方案1】:

    是的,它有点不正统,并且在“MIX CLASSICS”项目下似乎有一个特殊情况,它与其他项目不遵循相同的模式并且没有描述。所以你必须以某种方式处理这个问题(我做了)。但也有浇头布局(我没有操纵......你可以按照你想要的方式做那部分)。但这应该让你朝着正确的方向前进。此外,无需使用 Selenium。

    代码:

    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')
    

    输出:

    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
    

    【讨论】:

      【解决方案2】:

      首先您将变量声明为列表,但在分配.find() 之后,它们不再是列表,因为它不会返回列表! find_all 确实:

      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')
      

      【讨论】:

      • 还是不行。现在它会刮,但它会刮掉它想要的任何东西(或者我错误地和非自愿指定的任何东西)。查看抓取的截图:i.ibb.co/WnYKvJV/Screen-Shot-2020-11-16-at-23-11-23.png
      • 现在它甚至没有刮掉“AttributeError:'NoneType'对象没有属性'text'”。没有它会刮,不是想要的,而是刮。
      猜你喜欢
      • 1970-01-01
      • 2018-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-24
      • 1970-01-01
      相关资源
      最近更新 更多