Profilo di Lime_In_The_Coconut

Nome Lime_In_The_Coconut
Indirizzo email n/a
Messaggi11
  • ricerca immagini
    Forum >> Programmazione Python >> Web e Reti
    Ciao a tutti,
    sto scrivendo un programma che, data una lista di url, per ciascun url ne estrae le immagini.

    il problema è che non riesco a tirare fuori tutte le immagini da alcuni siti web.

    il codice è il seguente:
    dict={}
    lista=[]
    
    for url in url_list:
        r = requests.Session()
        html = r.get(url)
        soup = bs4.BeautifulSoup(html.content, "html5lib")
        if re.search(pattern,soup.get_text()): continue
        for img in soup.find_all(name="img"):
            src = img.get("src")
            lista.append(src)
        dict = lista
        lista = []

    il problema ad esempio è che per l'url: http://www.morguefile.com/search/morguefile/1/yoga/pop ricevo il seguente output:



    http://www.morguefile.com/search/morguefile/1/yoga/pop ['/img/icon_search.svg', '/img/icon_quest.png', '/img/icon_search_close.svg', '/img/prm/iStock_white.png', '/img/icon_sort.svg', '/img/prm/iStock_white.png', '/img/prm/iStock_white.png', '/img/prm/istockclosePopup.png', '/img/prm/iStock ByGI TM white.png']


    Non riesco a capire perchè.. analizzando la pagina ci sono molti tag img e questi non vengono catturati..




    --- Ultima modifica di Lime In The Coconut in data 2017-01-19 22:13:05 ---

    --- Ultima modifica di Lime In The Coconut in data 2017-01-19 22:14:43 ---

    --- Ultima modifica di Lime In The Coconut in data 2017-01-19 22:14:53 ---

    --- Ultima modifica di Lime In The Coconut in data 2017-01-19 22:15:40 ---

    --- Ultima modifica di Lime In The Coconut in data 2017-01-19 22:15:56 ---


    --- Ultima modifica di Lime In The Coconut in data 2017-01-19 22:38:00 ---


    --- Ultima modifica di Lime In The Coconut in data 2017-01-19 22:38:41 ---
  • Re: Banale: IF e PyQT
    Forum >> Principianti
    Ciao, per il primo problema la soluzione sembra semplice: dato che le stringhe hanno simile struttura ti basta lavorare con gli indici per prendere quello che ti serve.
    ecco un esempio
    lista=[]
    >>> for elem in a:
        lista.append(elem[0:3])


  • comprendere i generatori
    Forum >> Principianti
    Ciao a tutti,
    sto cercando di comprendere la funzione dei generatori con kw yield. Ho preso questo codice in rete e da solo ho provato a modificarlo con yield, ma ancora riesco a ottenere il risultato sperato:


    import time
    def red_cars(answer):
        n = 0
        while True:
            if answer == 'yes':
                n = n + 1
                yield n
            else:
                yield n
    
    stop = time.time() + 5 * 60
    while time.time() < stop:
        answer = input('Did you spot a red car on the road? ("yes" or "no"): ')
        times = red_cars(answer)
        print(next(times))
    Se rispondo yes il risultato della print è 1, ma alla successiva domanda anche se rispondo yes il risultato è fermo a 1.
    Yield non dovrebbe registrare un risultato e mantenerlo sino alla prossima chiamata next()?
    grazie :)


    --- Ultima modifica di Lime In The Coconut in data 2016-11-27 17:12:38 ---
  • Re: gestire errori di requests
    Forum >> Programmazione Python >> Web e Reti
    ok per gestire il problema e non interrompere il programma faccio così:

    request_list=[]
        for url in no_duplicate:
            try:
                res=requests.get(url)
                print(res)
                res.raise_for_status()
                soup2 = bs4.BeautifulSoup(res.text, "html5lib")
                request_list.append(soup2)
            except requests.exceptions.HTTPError:
                 print("connessione non riuscita")
            except requests.exceptions.TooManyRedirects:
                print("TooManyRedirects")
    per ora va bene con gli errori che sto trovando e ottengo comunque una lista dove ciascun elemento è il codice sorgente di una pagina

  • gestire errori di requests
    Forum >> Programmazione Python >> Web e Reti
    Ciao a tutti,
    sto creando uno script che chiede all'utente di inserire una keyword, dopodichè apre la prima pagina dei risultati di ricerca di google, colleziona tutti i link dei risultati in una lista e, con i moduli BeautifulSoup e requests crea una nuova lista dove ciascun elemento è il codice sorgente della pagina.
    L'obiettivo successivo è analizzare ogni singola pagina (meta dati, testo, etc) ma per ora sono fermo a un problema.
    Per ogni richiesta non sempre ottengo un response 200.
    A volte mi arrivano errori 403 o TooManyRedirects.
    Addirittura in un link a cui lo script non riesce ad accedere, e che ho provato a inserire nella barra degli indirizzi, google mi dice "rileviamo traffico insolito proveniente dal tuo computer"
    Come posso gestire la cosa? Per lo meno aggirando il problema ignorando l'errore?
    Grazie


    --- Ultima modifica di Lime In The Coconut in data 2016-11-09 12:34:07 ---
  • Re: analizzare file
    Forum >> Principianti
    Ciao Daniele,

    riposto innanzitutto il codice che ho modificato un po':

    def ricerca_elemento(file,elem):
        lista=[]
        with open(file,encoding="UTF-8",errors="replace") as f:
            s=f.readlines()
            print(s)
            count=0
            for line in s:
                if elem.lower() in line:
                    lista.append(line)
                    count+=1
            print(lista)
            print(count)
    finito=False
    while not finito:
        richiesta=input("Digita il nome del file: ")
        elemento=input("Digita elemento da cercare: ")
        ricerca_elemento(richiesta,elemento)
        s1=input("----Finisco? ")
        finito=s1.lower()=="si"   
    
    Allora ho creato di nuovo un file di testo e stavolta funziona, stampa la prima riga se la parola cercata è all'inizio. Il problema è che nel file che ho creato (frasi.txt) la prima parola della prima riga è minuscola, e quindi funziona.
    quelle delle altri file invece iniziavano con la lettera maiuscola.
    I problemi però sono due:
    1) con un elem.lower() non risolvo il problema
    2) nel file frasi.txt se cambio la prima parola da tutto minuscolo a prima lettera maiuscola, e scrivo il termine da ricercare esattamente uguale (es: Cane) non trova nulla
    non so dove può essere la soluzione
    vi allego comunque il file, forse è un problema di codifica.. ho messo comunque una gestione degli errori perchè in alcuni file ho problemi, non in questo che ti allego
    Grazie mille :)
    ps io sto vedendo young pope, devo dire che è molto bello (un po' pesante come al solito, però fico) :)
    ciao
  • analizzare file
    Forum >> Principianti
    Ciao a tutti,
    sto creando una funzione che prende in ingresso un file e un elemento e stampa le righe del file dove e' contenuto l'elemento in questione piu' il numero delle volte trovato
    il problema e' che non funziona con tutte le parole nel file, ad esempio di un qualsiasi file non stampa la prima parola della prima riga.
    Questo e' il codice:

    def ricerca_elemento(file,elem):
    
        lista=[]
        f=open(file,encoding="UTF-8")
        s=f.readlines()
       
        print(s)
        count=0
        for line in s:
            if elem in line:
                lista.append(line)
                count+=1
        print(lista)
        print(count)
    probabilmente il codice si puo' scrivere meglio, pero' non capisco perche' alcune parole le rileva e altre no

    grazie in anticipo
  • sommare elementi di una lista
    Forum >> Principianti
    ciao a tutti, come da titolo, come posso sommare tutti gli elementi di una lista di interi??
    grazie
  • reiniziare un programma
    Forum >> Principianti
    Ciao a tutti.
    sto scrivendo un semplice script per valutare se un triangolo è scaleno, equilatero o isoscele:








    def controllo(x):
    
        if x.isdecimal() and x>'0':
    
            x=int(x)
    
            print ("numero corretto")
    
        else:
    
            print ("errore: inserire interi positivi maggiori di zero")
    
            
    a=input("Digita il primo intero positivo: ")
    
    controllo(a)
    
        
    
    b=input("Digita il secondo intero positivo: ")
    
    controllo(b)
    
        
    
    c=input("Digita il terzo intero positivo: ")
    
    controllo(c)
    
        
    
    
    







    vorre che nella funzione controllo() qualora si inserissero dati non validi il programma ricominciasse dall'inizio invece che continuare. come posso fare?

    Grazie mille


    --- Ultima modifica di Lime In The Coconut in data 2016-09-27 18:51:38 ---

    --- Ultima modifica di Lime In The Coconut in data 2016-09-27 18:59:27 ---

    --- Ultima modifica di Lime In The Coconut in data 2016-09-27 19:00:09 ---

    --- Ultima modifica di Lime In The Coconut in data 2016-09-27 19:40:34 ---
  • Cifrario di Cesare
    Forum >> Principianti
    Ciao a tutti,



    ho da poco inziato a studiare Python e la programmazione in generale, e vorrei chiedervi un aiuto in merito ad uno script che ho incontrato in un libro e che non riesco a comprendere appieno.




    Lo script praticamente simula il metodo di cifratura noto come "Cifrario di Cesare": in una parola, ciascuna lettera contenuta viene trasformata in un'altra lettera distante dalla prima un certo numero di passi (ad esempio: "Cane", se scegliamo come distanza 1, verrà trasformata in "Dbof" - spero di essermi spiegato, su wikipedia comunque trovate una descrizione maggiormente dettagliata: https://it.wikipedia.org/wiki/Cifrario_di_Cesare




    Lo script chiede all'utente di inserire una stringa da decifrare (una password diciamo) e di stabilire la distanza, dopodiché effettua la conversione:




    plainText=input("Digita una parola in lettera minuscola: ")
    
    distance=int(input("Digita il valore della distanza: ")
    
    code=""
    
    for ch in plainText:
    
    ordValue=ord(ch)
    
    cipherValue = ordValue + distance
    
    if cipherValue > ord('z'):
    
    	cipherValue= ord('a') + distance - \
    
    	(ord('z') - ordValue+1)
    
    	code+=chr(ciphervalue)
    
    print(code)
    




    Mi è tutto chiaro sino alla riga 8: partiamo dal presupposto che le lettere minuscole dell'alfabeto italiano sono 26 (si parte da 0, quindi la lettera 'z' ha il valore 25 - non sto usando qui i corrispettivi valori numerici in ASCII)




    Quindi, se ad esempio mi trovo davanti la lettera con ordinale 22 ("w") e pongo la distanza a 6, andrò a sforare oltre la lettera 'z' innescando le istruzioni contenute nell'if




    quello che non mi è chiaro è l'operazione contenuta nella variabile cipherValue contenuta nell'if: calcolo la distanza da 'a' (quindi es 0+6) a cui sottraggo il valore di 'z' meno l'ordinale della lettera ciclata più 1, nel nostro esempio: (0+6)-(25-23)=6-2=4.

    quindi sostituisco 'w' con 'e'....Giusto??




    Non mi è chiara principalmente la seconda espressione (ord('z')-OrdValue+1)




    Inoltre non riesco a capire lo slash \ a riga 8




    Vi ringrazio infinitamente per l'aiuto, in matematica sono un po' arrugginito, quindi forse è per questo che mi blocco...




    Grazie!!!


    --- Ultima modifica di Lime In The Coconut in data 2016-09-16 21:43:57 ---

    --- Ultima modifica di Lime In The Coconut in data 2016-09-16 21:46:41 ---