Lever les erreurs sur le socket
Bonjour,
J'ai un petit souci sur un script que j'ai réalisé récemment. Le script en question par d'une URL de base, récupère le texte html de la page grâce à la librairie urllib2 et qui ensuite à l'aide d'une regex je récupère tous les liens puis je les "nettoies" ( http://www.developpez.net/forums/newthread.php?do deviendra => http://www.developpez.net ) puis je fais la même chose, a partir de ces liens propre je récupère la page puis les liens et ainsi de suite.
En bref une sorte de Web Crawler comme on dit.
Supposons tmp1 une liste de lien :
Code:
1 2 3 4 5 6 7 8 9 10 11
| for url in tmp1 :
print '### Try to get ' + url + ' page...'
req = urllib2.Request(url, '', Headers)
try :
HTMLsourcetmp = urllib2.urlopen(req)
except:
print '### ERROR !'
pass
else :
HTMLsource = HTMLsource + HTMLsourcetmp.read()
print '### Succes !' |
Seulement quand mon script tourne, au bout du 70éme lien ou bien au bout de 3000 liens ( de façon aléatoire quoi... ) j'ai des erreurs qui ne sont pas levées, ce sont des erreurs en rapport avec le "Socket"
J'ai deux type d'erreur :
Code:
1 2 3 4 5 6 7 8 9 10 11
|
Traceback (most recent call last):
File "parser.py", line 140, in <module>
HTMLsource = HTMLsource + HTMLsourcetmp.read()
File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/socket.py", line 291, in read
data = self._sock.recv(recv_size)
File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/httplib.py", line 529, in read
s = self.fp.read(amt)
File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/socket.py", line 309, in read
data = self._sock.recv(recv_size)
socket.timeout: timed out |
Ou encore :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/urllib.py", line 82, in urlopen
return opener.open(url)
File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/urllib.py", line 190, in open
return getattr(self, name)(url)
File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/urllib.py", line 328, in open_http
errcode, errmsg, headers = h.getreply()
File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/httplib.py", line 1195, in getreply
response = self._conn.getresponse()
File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/httplib.py", line 924, in getresponse
response.begin()
File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/httplib.py", line 385, in begin
version, status, reason = self._read_status()
File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/httplib.py", line 343, in _read_status
line = self.fp.readline()
File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/socket.py", line 331, in readline
data = recv(1)
IOError: [Errno socket error] (54, 'Connection reset by peer') |
J'ai fais beaucoup de recherche sur divers forum pour essayer de comprendre. ( Je suis débutant en python :ccool: )
D'une part je n'ai pas compris l'origine des erreurs ( que veulent t-elles dire ? :? )
D'autre part je n'ai pas non plus trouvé comment lever ces erreurs ?
Merci d'avance pour votre aide, j'espère que vous allez pouvoir m'éclairer :-)