I need to scrape some pages using Selenium, and before I can scrape, I need to search for specific keywords inside the website and scrape all the content related to those keywords like this:
Website example
Problem is I can’t always use boolean operator to search for all my keywords, so I need to search a keyword like “big data”, scrape the content in the search page, clicking on all the url of the articles to scrape the full content, do this for all the articles then going back and search a new keyword.
I already have a code that is working for some websites I need to scrape, but it misses the part where I search for every keyword
from selenium import webdriver
from selenium.webdriver.common.by import By
import pandas as pd
def scrape_page(url):
try:
# Apri il sito web nel browser
driver.get(url)
driver.maximize_window()
# Gestisci il banner dei cookie, se presente
try:
cookie_banner = driver.find_element(By.XPATH, "")
cookie_banner.click()
except:
pass
# Imposta un intervallo di attesa esplicito per 10 secondi per garantire che la pagina sia completamente caricata
driver.implicitly_wait(10)
# Trova tutti gli elementi "Continua a leggere"
elements = driver.find_elements(By.XPATH, "")
# Lista per memorizzare i dati estratti
data = []
# Clicca su ciascun elemento
for index, element in enumerate(elements):
try:
# Ottieni URL e titolo dell'articolo
article_url = driver.find_element(By.XPATH, "'(])["+str(index+1)+"]").get_attribute("href")
article_title = element.find_element(By.XPATH, "'(])["+str(index+1)+"]").text
# Clicca sull'elemento
driver.find_element(By.XPATH, "'])["+str(index+1)+"]").click()
# Ottieni il contenuto della landing page di "Continua a leggere"
article_content = driver.find_element(By.XPATH, "").text
# Ottieni la data dell'articolo
article_date = driver.find_element(By.XPATH, "").text
# Aggiungi i dati alla lista
data.append({'Titolo': article_title, 'Data': article_date, 'URL': article_url, 'Contenuto': article_content})
# Torna alla pagina precedente
driver.back()
except Exception as e:
print("Errore durante il clic sull'elemento:", str(e))
except Exception as e:
print("Errore durante lo scraping della pagina:", str(e))
return None
return data
# Crea un'istanza del driver del browser
driver = webdriver.Chrome()
# URL del sito web da cui desideri effettuare il click
start_url = "https://www.salute.gov.it/portale/home.html"
# Lista per memorizzare tutti i dati estratti da tutte le pagine
all_data = []
# Cicla le pagine finché ci sono pagine successive
while start_url:
print("Scraping:", start_url)
page_data = scrape_page(start_url)
if page_data:
all_data.extend(page_data)
try:
# Cerca il link alla pagina successiva
next_page_link = driver.find_element(By.XPATH, "")
# Estrae l'URL della pagina successiva
start_url = next_page_link.get_attribute("href")
except:
# Se non ci sono più pagine successive, interrompe il ciclo
start_url = None
# Chiudi il browser
driver.quit()
# Costruisci un DataFrame Pandas con tutti i dati estratti
df = pd.DataFrame(all_data)
# Visualizza il DataFrame
print(df)
df.to_excel("")
Can someone help my update my code?
Thank you in advance