Forum >> Principianti >> Spider dal libro Marco Beri

Pagina: 1

Salve.

Leggendo il libro di @Marco Beri "Python" sono arrivato ai esempi degli semplici spider web che usano modulo threading e multiprocessing

Allora, nel primo esempio script funziona (penso), però non mi salva i siti trovati
Ecco il codice:
import threading, urllib.request, time
urls = ["www.ubuntu.com", "www.linux.org", "www.python.org"]
class esplora(threading.Thread):
    def __init__(self, url):
        threading.Thread.__init__(self)
        self.url = url
        self.status = -1
    def run(self):
        print("Sto leggendo {0}".format(self.url))
        urllib.request.urlretrieve("http://{0}".format(self.url))
        print("Ho letto e salvato {0} alle ore {1}".format(self.url, time.strftime("%H:%M:%S")))
for url in urls:
    esplora_url = esplora(url)
    esplora_url.start()
Eseguendo il primo script dalla riga di comando, mi trova i siti citati però non li salva come nel libro(Allego immagine spider).

Con secondo esempio spider_multi.py mi trovo già errori nell'esecuzione.

Ecco il codice:
from multiprocessing import Pool
import urllib.request, time, os
def esplora(url):
    print("Sto leggendo {0} (proc:{1})".format((url, os.getpid())))
    urllib.request.urlretrieve("http://{0}".format(url), url)
    print("Ho letto e salvato {0} alle ore {1}".format(self.url, time.strftime("%H:%M:%S")))
if __name__ == '__main__':
    p = Pool(3)
    p.map(esplora, ["www.ubuntu.com", "www.linux.com", "www.python.org"])
Con questo script mi solleva un sacco di errori:

multiprocessing.pool.RemoteTraceback: 
"""
Traceback (most recent call last):
  File "C:\Python3\lib\multiprocessing\pool.py", line 119, in worker
    result = (True, func(*args, **kwds))
  File "C:\Python3\lib\multiprocessing\pool.py", line 44, in mapstar
    return list(map(*args))
  File "C:\Users\Murchik\Prova\spider_multi.py", line 4, in esplora
    print("Sto leggendo {0} (proc:{1})".format((url, os.getpid())))
IndexError: tuple index out of range
"""

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:/Users/Murchik/Prova/spider_multi.py", line 9, in <module>
    p.map(esplora, ["www.ubuntu.com", "www.linux.org", "www.python.org"])
  File "C:\Python3\lib\multiprocessing\pool.py", line 260, in map
    return self._map_async(func, iterable, mapstar, chunksize).get()
  File "C:\Python3\lib\multiprocessing\pool.py", line 608, in get
    raise self._value
IndexError: tuple index out of range
Pure per questo esempio allego immagine di esecuzione nel cmd.exe

Forse sbaglio con gli spazi o posizioni delle righe(leggo il libro digitale) che capita spesso a me :embarrassed:

Grazie in anticipo e buone feste :birrame:.



Allegati
Salve.

Leggendo il libro di @Marco Beri "Python" sono arrivato ai esempi degli semplici spider web che usano modulo threading e multiprocessing

Allora, nel primo esempio script funziona (penso), però non mi salva i siti trovati
In effetti quel codice non contiene nessuna istruzione per salvare i dati. Suppongo per brevità d'esempio, o per pigrizia dell'autore :P

[...]

Con secondo esempio spider_multi.py mi trovo già errori nell'esecuzione.

Ecco il codice:
from multiprocessing import Pool
import urllib.request, time, os
def esplora(url):
    print("Sto leggendo {0} (proc:{1})".format((url, os.getpid())))
    urllib.request.urlretrieve("http://{0}".format(url), url)
    print("Ho letto e salvato {0} alle ore {1}".format(self.url, time.strftime("%H:%M:%S")))
if __name__ == '__main__':
    p = Pool(3)
    p.map(esplora, ["www.ubuntu.com", "www.linux.com", "www.python.org"])
Con questo script mi solleva un sacco di errori:

multiprocessing.pool.RemoteTraceback: 
"""
Traceback (most recent call last):
  File "C:\Python3\lib\multiprocessing\pool.py", line 119, in worker
    result = (True, func(*args, **kwds))
  File "C:\Python3\lib\multiprocessing\pool.py", line 44, in mapstar
    return list(map(*args))
  File "C:\Users\Murchik\Prova\spider_multi.py", line 4, in esplora
    print("Sto leggendo {0} (proc:{1})".format((url, os.getpid())))
IndexError: tuple index out of range
"""

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:/Users/Murchik/Prova/spider_multi.py", line 9, in <module>
    p.map(esplora, ["www.ubuntu.com", "www.linux.org", "www.python.org"])
  File "C:\Python3\lib\multiprocessing\pool.py", line 260, in map
    return self._map_async(func, iterable, mapstar, chunksize).get()
  File "C:\Python3\lib\multiprocessing\pool.py", line 608, in get
    raise self._value
IndexError: tuple index out of range
Pure per questo esempio allego immagine di esecuzione nel cmd.exe
Forse sbaglio con gli spazi o posizioni delle righe(leggo il libro digitale) che capita spesso a me :embarrassed:

No, quel codice contiene due errori (questa volta per pigrizia del revisore :eyeroll: ): la riga
print("Sto leggendo {0} (proc:{1})".format((url, os.getpid())))
dovrebbe essere
print("Sto leggendo {0} (proc:{1})".format(url, os.getpid()))
, mentre la riga
    print("Ho letto e salvato {0} alle ore {1}".format(self.url, time.strftime("%H:%M:%S")))
va riscritta così:
    print("Ho letto e salvato {0} alle ore {1}".format(url, time.strftime("%H:%M:%S")))

Grazie in anticipo e buone feste :birrame:.

Anche a te!

cm


--- Ultima modifica di ㎝ in data 2016-12-29 11:19:31 ---
THE 🍺-WARE LICENSE (Revision ㊷):
<carlo@🐍.it> wrote this post. As long as you retain this notice you
can do whatever you want with this stuff. If we meet some day, and you
think this stuff is worth it, you can buy me a 🍺 in return. -- ㎝
Ciao.
Dopo la tua correzione lo script funziona.
Ho ancora un problema dal libro, volevo chiedere, perché sono un nuovo nel forum. Posso postare qui il problema seguente ho devo aprire una nuova discussione?
Grazie ancora, anche se un pò in ritardo
Ciao.
Dopo la tua correzione lo script funziona.
Ottimo.




Ho ancora un problema dal libro, volevo chiedere, perché sono un nuovo nel forum. Posso postare qui il problema seguente ho devo aprire una nuova discussione?




Va benissimo anche qui




Grazie ancora, anche se un pò in ritardo




:P

THE 🍺-WARE LICENSE (Revision ㊷):
<carlo@🐍.it> wrote this post. As long as you retain this notice you
can do whatever you want with this stuff. If we meet some day, and you
think this stuff is worth it, you can buy me a 🍺 in return. -- ㎝


Pagina: 1



Esegui il login per scrivere una risposta.