urllib “módulo objeto no es llamable”

Este es mi tercer proyecto de Python, y he recibido un mensaje de error: el 'module object' is not callable .

Sé que esto significa que estoy haciendo referencia a una variable o función incorrectamente. Pero la prueba y el error no han podido ayudarme a resolver esto.

 import urllib def get_url(url): '''get_url accepts a URL string and return the server response code, response headers, and contents of the file''' req_headers = { 'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.ABC Safari/525.13', 'Referer': 'http://python.org'} #errors here on next line request = urllib.request(url, headers=req_headers) # create a request object for the URL opener = urllib.build_opener() # create an opener object response = opener.open(request) # open a connection and receive the http response headers + contents code = response.code headers = response.headers # headers object contents = response.read() # contents of the URL (HTML, javascript, css, img, etc.) return code , headers, contents testURL = get_url('http://www.urlhere.filename.zip') print ("outputs: %s" % (testURL,)) 

He estado usando este enlace como referencia: http://docs.python.org/release/3.0.1/library/urllib.request.html

Rastrear:

 Traceback (most recent call last): File "C:\Project\LinkCrawl\LinkCrawl.py", line 31, in  testURL = get_url('http://www.urlhere.filename.zip') File "C:\Project\LinkCrawl\LinkCrawl.py", line 21, in get_url request = urllib.request(url, headers=req_headers) # create a request object for the URL TypeError: 'module' object is not callable 

En Python 3, el objeto urllib.request es un módulo. Necesita llamar a los objetos contenidos en este módulo. Este es un cambio importante de Python 2, si está utilizando un código de ejemplo, debe tenerlo en cuenta.

Por ejemplo, creando el objeto Request y el abridor:

 request = urllib.request.Request(url, headers=req_headers) opener = urllib.request.build_opener() response = opener.open(request) 

Lea la documentación cuidadosamente.

urllib.request es un módulo. urllib.request.Request es una clase. Llamar a un módulo como lo estás haciendo actualmente genera un error. Probablemente quieras llamar a la clase, así:

 request = urllib.request.Request(url, headers=req_headers) # create a request object for the URL 

Probablemente también querrá usar build_opener de urllib.request lugar de solo urllib :

 opener = urllib.request.build_opener() # create an opener object 

También ocurre si ha declarado el método de devolución como un método de propiedad al anotar con @property.