Scrapowanie miniaturek ze strony internetowej

0

Hej, mam pytanie, robię sobie aplikację na portfolio (scrapping + Python) i nie mogę sobie poradzić z dwoma rzeczami,
Jak pobrać miniaturki zdjęć?
https://www.olx.pl/d/motoryzacja/samochody/porsche/?search%5Bfilter_enum_model%5D%5B0%5D=944

miałem kod któty pobierał po XPath:

//*[@id="root"]/div[1]/div[2]/form/div[5]/div/div[2]/div[{counter}]/a/div/div/div[1]/div[1]/div
i wszytko działo dobrze a od 2 dni dostaję informację

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate..

.. włosy sobie z głowy wyrywam 😃 może JS coś dynamicznie zmienia? (tą wskazówkę dostałem od użytkownika 4p. (za co dziękuję) ale dalej nie mogę sobie z tym poradzić), Jak pobrać te miniaturki?

  1. Którego DIVa kliknąć a Scrapingu aby wejść w konkretną ofertę auta? też się w tym pogubiłem bo można kliknąć i na cenę i zdjęcie.. już przeklikałem się przez chyba wszystkie DIVy i mam ten sam błąd co wyżej.. Bardzo dziękuję za pomoc
import request
from selenium import webdriver
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.options import Options

def downloadImage(url, name):
    r = requests.get(url)
    with open(name, "wb") as f:
        f.write(r.content)

option = Options()
driver = webdriver.Chrome(ChromeDriverManager().install(), options=option)
driver.get('https://www.olx.pl/d/motoryzacja/samochody/porsche/?search%5Bfilter_enum_model%5D%5B0%5D=944')
driver.find_element(By.ID, 'onetrust-accept-btn-handler').click()  # Cookies

img=driver.find_element(By.CLASS_NAME, 'css-gl6djm')
imgURL=img.get_attribute('src')
savedImageName='Image.jpg'
downloadImage(imgURL,savedImageName)



  name = r'work_dir/'
url = r'https://www.olx.pl/d/motoryzacja/samochody/porsche/?search%5Bfilter_enum_model%5D%5B0%5D=944'
downloadImage(url, name)```
0

Tak jak mówiłem wcześniej - Rób proste zagnieżdżenia.

const imgs = document.querySelectorAll("div[data-cy='l-card'] img")

W tym przypadku l-card jest kontenerem jednego ogłoszenia. Z poziomu tego elementu możesz wyciągać dane.

No i unikaj selektorów w stylu co podałeś css- bo te zmieniają się najczęściej.

0
ledi12 napisał(a):

Tak jak mówiłem wcześniej - Rób proste zagnieżdżenia.

const imgs = document.querySelectorAll("div[data-cy='l-card'] img")

W tym przypadku l-card jest kontenerem jednego ogłoszenia. Z poziomu tego elementu możesz wyciągać dane.

No i unikaj selektorów w stylu co podałeś css- bo te zmieniają się najczęściej.

hmm.. ale to jest kod JS, a ja robię portfolio na razie w Python (wybacz uwagę, w sumie uczę się Scrapować wiec jeszcze dużo nie wiem), naStacku dostałem taki kod:

import requests
from selenium import webdriver
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.options import Options


def downloadImage(url, name):
    r = requests.get(url)
    with open(name, "wb") as f:
        f.write(r.content)


option = Options()
driver = webdriver.Chrome(ChromeDriverManager().install(), options=option)
driver.get('https://www.olx.pl/d/motoryzacja/samochody/porsche/?search%5Bfilter_enum_model%5D%5B0%5D=944')
driver.find_element(By.ID, 'onetrust-accept-btn-handler').click()  # Cookies

img = driver.find_element(
    By.XPATH, '//*[@id="root"]/div[1]/div[2]/form/div[5]/div/div[2]/div[2]/a/div/div/div[1]/div[1]/div/img')

imgURL = img.get_attribute('src')
print(imgURL)
savedImageName = 'Image.jpg'
downloadImage(imgURL, savedImageName)

i zadziałał ale ze drugim razem dostałem:
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="root"]/div[1]/div[2]/form/div[5]/div/div[2]/div[14]/a/div/div/div[1]/div[1]/div/img"} (Session info: chrome=106.0.5249.119)

Próbuję Chroma zaktualizować może tu jest jakiś problem..

0

Język jest tutaj bez znaczenia. Chodziło mi głównie o selektor, który możesz identycznie wywołać w selenium.

0
ledi12 napisał(a):

Język jest tutaj bez znaczenia. Chodziło mi głównie o selektor, który możesz identycznie wywołać w selenium.

jasne, dalej walczę ;) dziś serio.. mi tem kod już się śnił.. :/, tak na marginesie, ciasteczka też co chwilę wywalam..

1 użytkowników online, w tym zalogowanych: 0, gości: 1