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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 )

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 :-)