120 lines
5.4 KiB
Python
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.")
|