diff --git a/scrapeje.py b/scrapeje.py new file mode 100644 index 0000000..fc44618 --- /dev/null +++ b/scrapeje.py @@ -0,0 +1,194 @@ +import re +import os +from bs4 import BeautifulSoup +from selenium import webdriver +from selenium.webdriver.support.ui import WebDriverWait +from selenium.webdriver.support import expected_conditions as EC +from selenium.webdriver.common.by import By +#import requests +#import cloudscraper +#import json + + +#Inizializzo liste +nome=[] +desc=[] +npezzi=[] +prezzo=[] +#prezzof=[] +prezzoN=[] +scripto=[] + + +#INPUT +#prende l url della pagina justeat del ristorante in input +print ("\nesempio: https://www.justeat.it/restaurants-pizzeria-la-garganica-bologna/menu") +#restaurant_url = input('INSERISCI IL LINK DELLA PAGINA DEL RISTORANTE: ') + +#PER DEBUG +restaurant_url = 'https://www.justeat.it/restaurants-pizzeria-la-garganica-bologna/menu' + + +#INIZIALLIZZO PARSER +# driver = webdriver.Chrome() +# driver.get(restaurant_url) + +# wait = WebDriverWait(driver, 10) +# wait.until(EC.presence_of_element_located((By.CLASS_NAME, "c-menuItems-price--offline"))) + +# page = driver.page_source + +# with open('JEmenu.html', 'w') as f: +# f.write(page) + +#apre e legge il file +with open('JEmenu.html', 'r') as f: + page = f.read() + +#PARSER +soup = BeautifulSoup(page, "html.parser") + + +#Stora nome ristorante +nrist = soup.title.text[8:-32] + +#Stora telefono del ristorante +pattern = re.compile(r'allergenPhoneNumber') +script_tags = soup.find_all('script', string=pattern) +pattern = re.compile(r'"allergenPhoneNumber":"(\d+)"') +tel = re.search(pattern, script_tags[0].next) +if tel: + tel = tel.group(1) + +#Stato ristorante +restaurant_is_open = menu = soup.find(attrs={"data-js-test":"order-status-wrapper"}).text +restaurant_is_open = restaurant_is_open.replace('\n', ' ') +regex = r" {4,}" +result = re.split(regex, restaurant_is_open) + +#indirizzo ristorante +restaurant_address = soup.find(attrs={"data-js-test":"header-restaurantAddress"}).text + +#cicla le schede prodotto +menu = soup.find(attrs={"data-test-id": "menu-item"}) +for menu in soup.find_all(attrs={"data-test-id": "menu-item"}): + att=menu + #riempie la lista "nome" + for att in menu.find(attrs={"data-test-id": "menu-item-name"}): + if att != type(None): + if att != " ": + nome.append(att.lstrip().splitlines()[0]) + break + else: + continue + + #riempie la lista "desc" + att=menu.find("p", class_="c-menuItems-description") + if att != None: + for att in menu.find("p", class_="c-menuItems-description"): + desc.append(att.lstrip().splitlines()[0]) + else: + desc.append(None) + + + #riempie la lista "prezzo" + for att in menu.find(attrs={"data-js-test": "menu-item-price"}): + #prezzo.append(att.lstrip().splitlines()[0]) + counter=0 + if att != " " and counter % 2 == 0: + prezzo.append(att.lstrip()) + counter+=1 + else: + counter+=1 + continue + continue + + + + + #riempie la lista "npezzi" + att=menu.find_all(attrs={"data-test-id": "menu-item-description"}) + if att != None: + if menu.text.find("pezzo") > 0 or menu.text.find("pezzi") > 0: + npezzi.append(menu.text.splitlines()[7].lstrip()) + else: + npezzi.append(None) + continue + +print(len(prezzo)) +print(len(nome)) + +# #stampa liste +for x in range(len(nome)): + print("\n") + print(nome[x]) + print(desc[x]) + print(npezzi[x]) + print(prezzo[x]) + + +#stampa lunghezza liste +print("\n") +print(nrist) +print(restaurant_address.strip()) +print("\n") +doppione = "" +for i in range(len(result)): + if re.search(r"[a-zA-Z]", result[i]): + if (result[i]) == doppione: + print("\n") + else: + print(result[i]) + elif re.search(r"\d", result[i]): + print(result[i], result[i+1]) + doppione = (result[i+1]) +print("telefono:",tel) +print("lista nome:",len(nome)) +print("lista desc:",len(desc)) +print("lista npezzi:",len(npezzi)) +print("lista prezzi:",len(prezzo)) #sono stringhe ovvero ci sono anche prezzi come "da 1,00 €" (servirà formattarla in double per poter fare i conti) + +prezzoN = prezzo.copy() +#Genera la lista prezzoN[] che è un clone di "prezzo[] ma con i valori double azichè string" +for i in range(len(prezzo)): + if "€" in prezzo[i]: + prezzoN[i] = float(prezzo[i].replace("€", "").replace(",", ".").replace("da ", "")) + elif "Non" in prezzo[i]: + prezzoN[i] = 0 + prezzoN[i] = float(prezzoN[i]) + else: + prezzoN[i] = 99999 +#per debug +for x in range(len(nome)): + print(prezzoN[x]) + +print (len(prezzo)) +print (len(prezzoN)) + +# Generazione del codice HTML +html = "" +for x in range(len(nome)): + html += "

" + nome[x] + "

" + html += "

" + str(desc[x]) + "

" + html += "

N. pezzi disponibili: " + str(npezzi[x]) + "

" + html += "

Prezzo: €" + str(prezzoN[x]) + "

" + html += "" + html += "

" + +html += "

Prodotti aggiunti

" +html += "
" +html += "" +html += "" + + +# Salvataggio su file +with open("pagina.html", "w") as file: + file.write(html) + +#os.remove("JEmenu.html") \ No newline at end of file