Files
2026-05-18 06:40:19 +00:00

120 lines
5.4 KiB
Python

import json
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.common.exceptions import TimeoutException, NoSuchElementException, WebDriverException
from urllib.parse import urlparse, urlunparse
def pobierz_dane(url):
# Stałe ścieżki XPath do elementów
xpath_nazwa = '/html/body/div[2]/div/div[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[2]/h1'
xpath_obraz = '/html/body/div[2]/div/div[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/img'
xpath_kategoria = '/html/body/div[2]/div/div[1]/div[1]/div[1]/div[2]/div[1]/p[2]'
xpath_cena = '/html/body/div[2]/div/div[1]/div[1]/div[1]/div[2]/div[1]/div[3]/div'
xpath_media_spolecznosciowe = '/html/body/div[2]/div/div[1]/div[1]/div[1]/div[2]/div[1]/div[4]/div'
xpath_link_do_narzedzia = '/html/body/div[2]/div/div[1]/div[1]/div[1]/div[2]/div[1]/div[5]/a'
xpath_dodatkowa_wartosc = '//*[@id="what-is-tool"]/div[2]/div'
xpath_opis_narzedzia = '/html/body/div[2]/div/div[1]/div[1]/div[1]/div[2]/div[1]/p[1]'
# Konfiguracja przeglądarki
options = Options()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--disable-gpu')
options.add_argument('--window-size=1920,1080')
# Ścieżka do ChromeDriver
chromedriver_path = "./chromedriver.exe"
# Utwórz instancję przeglądarki
service = Service(executable_path=chromedriver_path)
try:
with webdriver.Chrome(service=service, options=options) as driver:
# Ustawienie timeoutów
driver.set_page_load_timeout(3)
driver.implicitly_wait(3)
# Otwórz stronę
driver.get(url)
try:
# Pobierz nazwę narzędzia z określonego XPath
element_nazwa = driver.find_element(By.XPATH, xpath_nazwa)
nazwa_narzedzia = element_nazwa.text
# Pobierz adres URL obrazu z określonego XPath
element_obraz = driver.find_element(By.XPATH, xpath_obraz)
adres_obraz = element_obraz.get_attribute('src')
# Pobierz kategorię z paragrafu
element_kategoria = driver.find_element(By.XPATH, xpath_kategoria)
wartosc_kategoria = element_kategoria.text
# Przekształć kategorię na listę
kategoria = [item.strip() for item in wartosc_kategoria.split(',')]
# Pobierz cenę ze ścieżki XPath
element_cena = driver.find_element(By.XPATH, xpath_cena)
wartosc_cena = element_cena.text
# Przekształć cenę na listę
cena = [item.strip() for item in wartosc_cena.split(',')]
# Pobierz wszystkie linki do mediów społecznościowych z określonego XPath
element_media_spolecznosciowe = driver.find_element(By.XPATH, xpath_media_spolecznosciowe)
linki = element_media_spolecznosciowe.find_elements(By.TAG_NAME, 'a')
media_spolecznosciowe = [link.get_attribute('href') for link in linki if link.get_attribute('href')]
# Pobierz adres URL z elementu określonego XPath bez parametrów
element_link_do_narzedzia = driver.find_element(By.XPATH, xpath_link_do_narzedzia)
url_bez_parametru = element_link_do_narzedzia.get_attribute('href')
# Usuń dodatkowe parametry z URL
parsed_url = urlparse(url_bez_parametru)
link_do_narzedzia = urlunparse(parsed_url._replace(query="", params="", fragment=""))
# Pobierz wartość z dodatkowej ścieżki XPath
element_dodatkowa_wartosc = driver.find_element(By.XPATH, xpath_dodatkowa_wartosc)
dodatkowa_wartosc = element_dodatkowa_wartosc.text
# Pobierz opis narzędzia z określonego XPath
element_opis_narzedzia = driver.find_element(By.XPATH, xpath_opis_narzedzia)
opis_narzedzia = element_opis_narzedzia.text
# Zbuduj wynikowy JSON
result = {
"nazwa_narzedzia": nazwa_narzedzia,
"obraz_url": adres_obraz,
"kategoria": kategoria,
"cena": cena,
"media_spolecznosciowe": media_spolecznosciowe,
"link_do_narzedzia": link_do_narzedzia,
"dodatkowa_wartosc": dodatkowa_wartosc,
"opis_narzedzia": opis_narzedzia
}
return result
except NoSuchElementException:
print(f"Element nie został znaleziony dla jednej z podanych ścieżek XPath.")
return None
except TimeoutException:
print("Czas ładowania strony został przekroczony.")
return None
except WebDriverException as e:
print(f"Wystąpił błąd związany z WebDriverem: {e}")
return None
except Exception as e:
print(f"Wystąpił błąd: {e}")
return None
# Przykładowe użycie funkcji
url = "https://www.futurepedia.io/tool/agentverse"
result = pobierz_dane(url)
# Wyświetl pobrane dane w formacie JSON
if result:
print(json.dumps(result, indent=2))
else:
print("Nie udało się pobrać danych.")