Topic: Scraping con Selenium  (Letto 70 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline mrtoldo

  • python unicellularis
  • *
  • Post: 1
  • Punti reputazione: 0
    • Mostra profilo
Scraping con Selenium
« il: Marzo 21, 2021, 15:26 »
Ciao a tutti!  :fingers-crossed: Sono nuovo del forum e da qualche mese mi sto approcciando a python e alla programmazione in generale; volevo chiedere un consiglio a quelli che usano il modulo Selenium per lo scraping.
Ho realizzato un programmino che mi cerca e poi scarica le foto e i video dal mio profilo Instagram; dopo aver studiato un pò come lavora il modulo sono riuscito a far funzionare il tutto ma il codice che ho scritto è un pò "brutto" e vorrei sistemarlo un pò.
Questo è il pezzo di codice che voglio sistemare, l'unico modo che ho trovato per verificare se trovo un elemento(in questo caso il div che contiene quello che mi interessa) nella pagina html è stato quello di usare il try/except (più di una volta anche), se l'istruzione mi da un errore di timeout passa all' istruzione successiva. In realtà così funziona anche ma ad ogni istruzione il programma aspetta qualche secondo per dare il timeout e a parer mio il codice scritto così non mi piace molto e l'esecuzione è lenta   :confused:
Ora la mia domanda è: posso riscrivere il tutto usando un test condizionale? Del tipo se la condizione risulta falsa (ossia da errore) procedi all'istruzione successiva?


images=[]
video=[]
counter=0
conta=1
#target_a3 è una lista dove all'interno ci sono tutti gli a_href singoli ai vari file instagram
for a in target_a3:
    driver.get(a)
    print("_______________________________________________")
    print("Esamino: ", conta, " ", target_a3[counter])
    time.sleep(1)
    try:
        #cerca le foto singole
        findimg = WebDriverWait(driver, 2).until(EC.visibility_of_element_located((By.XPATH, "//article[@class='QBXjJ M9sTE  L_LMM  JyscU  ePUX4']//img[@class='FFVAD']"))).get_attribute("src")
        print("Found PHOTO")
        images.append(findimg)
    except:
        try:
            #cerca le foto all'interno degli album
            findimg2 = WebDriverWait(driver, 2).until(EC.visibility_of_element_located((By.XPATH, "//li[@style='transform: translateX(0px);']//img[@class='FFVAD']"))).get_attribute("src")
            print("Found PHOTO")
            images.append(findimg2)
        except:
            try:
                #cerca i video
                findvid = WebDriverWait(driver, 2).until(EC.visibility_of_element_located((By.XPATH, "//li[@style='transform: translateX(0px);']//video[@type='video/mp4']"))).get_attribute("src") 
                if "blob" in findvid:
                    print("Blob file: download not supported")
                else:
                    print("Found VIDEO")
                    #print(findvid)
                    video.append(findvid)
            except:
                findvid = WebDriverWait(driver, 2).until(EC.visibility_of_element_located((By.XPATH, "//video[@type='video/mp4']"))).get_attribute("src")
                if "blob" in findvid:
                    print("Blob file: download not supported")
                else:
                    print("Found VIDEO")
                    #print(findvid)
                    video.append(findvid)
    counter += 1
    conta += 1
    time.sleep(1)


Grazie a tutti  :ok:

Offline tascio

  • python erectus
  • ***
  • Post: 188
  • Punti reputazione: 0
    • Mostra profilo
Re:Scraping con Selenium
« Risposta #1 il: Marzo 23, 2021, 15:57 »
Scrapo con Selenium anche io e da un bel pò di progetti, pare che il sistema, in realtà più veloce, sia proprio quello dei try/catch... Anche googlando non trovo soluzioni migliori

es. https://www.tutorialspoint.com/checking-if-element-exists-with-python-selenium