2013-04-18 2 views
0

Lorsque vous exécutez le code suivant:attribut erreur pour crawler web

import urllib 
import re 
from urllib import request 
import webbrowser 

#email pattern 
r'[\w._(),:;<>][email protected][\w._(),:;<>][.]\w+' 

# url pattern 
r'\w\w\w[.]\w+[.]\w+' 

html = urllib.request.urlopen('somelinkthatistoolongforstackoverflow') 

#find all websites 

websites = re.findall(r'http://www[.]\w+[.]\w+',str(html.read())) 
print(websites) 

#find all emails 

emails = re.findall(r'[\w._(),:;<>][email protected][\w._(),:;<>][.]\w+',str(html.read())) 
print(emails) 

#sort through websites and find other links 

for i in websites: 
    y = urllib.request.urlopen(i) 
    x = re.findall(r'http://www[.]\w+[.]\w+',str(y.read())) 
    websites.append(x) 

Je reçois cette erreur:

AttributeError: 'list' object has no attribute 'timeout' 

Avis AttributeError. Que puis-je faire à ce sujet? J'utilise le module urllib et le module regex (expressions régulières). C'est en python 3.3.0. Est-ce que quelqu'un peut m'aider avec ça? Si vous pouvez m'aider s'il vous plaît poster ci-dessous. Ceci est censé être un robot d'exploration Web pour trouver autant de liens et d'adresses e-mail que possible. Merci à tous ceux qui peuvent aider.

+0

Veuillez inclure le * full * traceback. –

Répondre

0

Vous voulez étendrewebsites:

websites.extend(x) 

parce x est lui-même une liste.

Vous actuellement ajoutez la liste des sites adaptés, donc à un moment donné, vous passerez cette liste comme i du for Lop à urllib.request.urlopen() qui tente alors de le traiter comme un objet Request, car il est certainement pas un chaîne, l'autre option valide.