Web Scraping El uso de la página web de Scrapy no se carga por complet

Web Scraping El uso de la página web de Scrapy no se carga por completo

Intentando raspar un sitio web con información de restaurantes.

La página no parece estar completamente cargada con contenido faltante.

Probé diferentes herramientas como selenium y BeautifulSoup, el mismo problema.

proceso hasta ahora.

SCRAPY:

fetch('https://www.talabat.com/egypt/restaurant/643637/dominos-pizza-kafr-abdo?aid=7123')
response.css('div.accordionstyle__AccordionContainer-h3jkuk-0 gnYKPd')
[]

Hermosa Sopa:

r = requests.get(f'https://www.talabat.com/egypt/restaurant/643637/dominos-pizza-kafr-abdo?aid=7123')
soup = bs(r.content)


resturant_cats = soup.find(class_='mt-2')
resturant_items = soup.find_all(class_='content open')
resturantmenu = pd.DataFrame(columns = ['ItemName','ItemCat','ItemPrice','ItemDesc'],index = range(len(resturant_items)))
# resturant_cats[1].find(class_='f-15').get_text()

print(resturant_items)

Ambos regresan faltando los datos de destino.

Luego de una inspección adicional, la fuente cargada devuelve este HTML

<div class="col-sm-11">
              <div class="menu-searchstyles__MenuSearchContainer-sc-383aw2-0 hHaWx">
               <input class="w-100 pl-2 py-2 pr-6 muted mb-3" placeholder="Search menu item" type="text" value=""/>
               <svg aria-hidden="true" class="svg-inline--fa fa-search fa-w-16 fa-2x search-fa f-18" data-icon="search" data-prefix="fas" focusable="false" role="img" viewbox="0 0 512 512" xmlns="http://www.w3.org/2000/svg">
                <path d="M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z" fill="currentColor">
                </path>
Mostrar la mejor respuesta

from bs4 import BeautifulSoup
import requests
import json
import pandas as pd


def main(url):
    r = requests.get(url)
    soup = BeautifulSoup(r.text, 'lxml')
    goal = json.loads(soup.select_one('#__NEXT_DATA__').text)
    df = pd.DataFrame(goal['props']['pageProps']
                      ['initialMenuState']['menuData']['items'])
    print(df)


main('https://www.talabat.com/egypt/restaurant/643637/dominos-pizza-kafr-abdo?aid=7123')

Salida:

           id                           name  ... isItemDiscount  isWithImage
0   770227845                     Meal for 4  ...          False        False
1   770227846                     Meal for 6  ...          False        False
2   770227847                 Barbecue Feast  ...          False        False
3   770227848                   Deluxe Feast  ...          False        False
4   770227849                     Margherita  ...          False        False
..        ...                            ...  ...            ...          ...
81  770227928                    RANCH SAUCE  ...          False        False
82  770227929                    Sugar Glaze  ...          False        False
83  770227932            Cinna Stix 8 Pieces  ...          False        False
84  770227933  Pineapple Cinna Stix 8 Pieces  ...          False        False
85  770227934         Chocolate Lava Souffle  ...          False        False

[86 rows x 14 columns]

Eso es extremadamente útil y directo al grano, ¿puedo pedir una explicación de por qué no se cargó correctamente?

@OmarAhmed El sitio web se carga dinámicamente a través de JS, ¡la biblioteca requests no representará el JS para usted! puede usar selenio para tal caso esperando que se presente el elemento; de lo contrario, puede usar mi solución

También recibo un error de 'JSONDecodeError: Expecting value: line 1 column 1 (char 0)' en el objetivo = json.loads(soup.select_one('#__NEXT_DATA__').text) y mi sopa devuelve sopa de cadena vacía.select_one ('#__NEXT_DATA__').texto

@OmarAhmed, ¿hizo algún cambio en el código? ya que se ejecuta desde mi lado perfectamente!

aquí está el error de código exacto imgur.com/a/VDDqTsq

De hecho, probé Selenium pero me encontré con el mismo problema en el que una sección de la página no se carga en absoluto.

@OmarAhmed, ¿cuál es el código de respuesta de su parte?

una muestra de la sopa devuelta imgur.com/a/c2XDmBW