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 :
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"
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 !'
J'ai deux type d'erreur :
Ou encore :
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
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 :-)
Partager