urllib "объект модуля не вызывать"
Это мой третий проект на python, и я получил сообщение об ошибке: 'module object' is not callable
.
Я знаю, что это означает, что я неправильно ссылаюсь на переменную или функцию. Но метод проб и ошибок не смог помочь мне решить эту проблему.
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.A.B.C 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,))
Я использую эту ссылку для справки: http://docs.python.org/release/3.0.1/library/urllib.request.html
Обратная связь:
Traceback (most recent call last):
File "C:ProjectLinkCrawlLinkCrawl.py", line 31, in <module>
testURL = get_url('http://www.urlhere.filename.zip')
File "C:ProjectLinkCrawlLinkCrawl.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
2 ответа:
В python 3 Объект
urllib.request
является модулем. Вам нужно вызвать объекты , содержащиеся в этом модуле. Это важное изменение от Python 2, Если вы используете пример кода, Вы должны принять это во внимание.Например, создание объекта
Request
и открывателя:request = urllib.request.Request(url, headers=req_headers) opener = urllib.request.build_opener() response = opener.open(request)
urllib.request
это модуль.urllib.request.Request
это класс. Вызов модуля, как вы сейчас делаете, вызывает ошибку. Вы, вероятно, хотите вызвать класс, например:request = urllib.request.Request(url, headers=req_headers) # create a request object for the URL
Вы также, вероятно, захотите использовать
build_opener
изurllib.request
вместо того, чтобы простоurllib
:opener = urllib.request.build_opener() # create an opener object