188 votes

AttributeError : L'objet 'module' ne possède pas d'attribut 'urlopen'.

J'essaie d'utiliser Python pour télécharger le code source HTML d'un site Web, mais je reçois cette erreur.

Traceback (most recent call last):  
    File "C:\Users\Sergio.Tapia\Documents\NetBeansProjects\DICParser\src\WebDownload.py", line 3, in <module>
     file = urllib.urlopen("http://www.python.org")
AttributeError: 'module' object has no attribute 'urlopen'

Je suis le guide ici : http://www.boddie.org.uk/python/HTML.html

import urllib

file = urllib.urlopen("http://www.python.org")
s = file.read()
f.close()

#I'm guessing this would output the html source code?
print(s)

J'utilise Python 3.

331voto

eumiro Points 56644

Cela fonctionne dans Python 2.x.

Pour Python 3, regardez dans le docs :

import urllib.request

with urllib.request.urlopen("http://www.python.org") as url:
    s = url.read()
    # I'm guessing this would output the html source code ?
    print(s)

27voto

moose Points 4945

Une solution compatible avec Python 2+3 est :

import sys

if sys.version_info[0] == 3:
    from urllib.request import urlopen
else:
    # Not Python 3 - today, it is most likely to be Python 2
    # But note that this might need an update when Python 4
    # might be around one day
    from urllib import urlopen

# Your code where you can use urlopen
with urlopen("http://www.python.org") as url:
    s = url.read()

print(s)

20voto

Manu Mariaraj Points 201
import urllib.request as ur
s = ur.urlopen("http://www.google.com")
sl = s.read()
print(sl)

Dans Python v3, "urllib.request" est un module en soi, donc "urllib" ne peut pas être utilisé ici.

10voto

Steven B. Peutz Points 141

Pour obtenir ' dataX = urllib.urlopen (url).read() Travailler en python 3 (cela aurait été correct pour python 2 ) vous devez juste changer 2 petites choses.

1 : La déclaration urllib elle-même (ajoutez le .request au milieu) :

dataX = urllib.request.urlopen(url).read()

2 : L'instruction d'importation qui le précède (passer de 'import urlib' à :

import urllib.request

Et cela devrait fonctionner en python3 :)

8voto

Shahzaib Chadhar Points 119

Changez DEUX lignes :

import urllib.request #line1

#Replace
urllib.urlopen("http://www.python.org")
#To
urllib.request.urlopen("http://www.python.org") #line2

Si vous avez reçu l'erreur ERROR 403 : Forbidden Error exception, essayez ceci :

siteurl = "http://www.python.org"

req = urllib.request.Request(siteurl, headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.100 Safari/537.36'})
pageHTML = urllib.request.urlopen(req).read()

J'espère que votre problème sera résolu.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X