2012-10-24 28 views
5

Tôi đã nhập hai thư viện urllibfrom urllib.request import urlopen.python urllib usage

thứ hai được chứa trong những người đầu tiên

Khi tôi đã đi qua mã và cố gắng để loại bỏ các dòng from urllib.request import urlopen, tôi nhận được tin nhắn này:

opnerHTMLnum = urllib.request.build_opener() 
AttributeError: 'module' object has no attribute 'request' 

Khi tôi khôi phục lại dòng from urllib.request import urlopen mã chạy.

Mọi người có thể giải thích lý do không?

import re 
#import http.cookiejar 
import os.path 
#import time 
#import urllib3 
import urllib 
from urllib.request import urlopen 
import sys 
import smtplib 
from email.mime.text import MIMEText 

# ... 

    opnerHTMLnum = urllib.request.build_opener() 
+1

'từ urlopen' nhập khẩu urllib.request cho ' ImportError: Không có mô-đun tên request' trên Python 2.7. Bạn đang sử dụng phiên bản Python nào? – utapyngo

Trả lời

2

Gói urllib chỉ là một gói. Đó là __init__.py không nhập urllib.request và do đó bạn không thể chỉ cần truy cập urllib.request bằng cách chỉ nhập urllib. Nó chỉ là một vùng tên.

Nhập urllib.request thay thế.

2

Cả hai import Xfrom X import Y thực hiện nhập bất kỳ mô-đun hoặc gói nào X được cung cấp.

Trong trường hợp này, urllib là một gói. Khi bạn import urllib, sau đó gói chính nó được nhập khẩu, và bạn có được một tham chiếu đến nó, nhưng bất kỳ submodules không được nhập khẩu (trong trường hợp này). Khi bạn thực hiện from urllib.request import ..., Python thực sự nhập toàn bộ mô-đun urllib.request, nhưng sau đó chọn ra các tên mà bạn đã yêu cầu và cung cấp cho bạn các tham chiếu đến chúng.

Nếu bạn không sử dụng urlopen, thì bạn cũng có thể dễ dàng thực hiện import urllib.request và nhận kết quả tương tự.

7

Bạn đang bối rối python3 gói urllib.request với Python2.7 một trong đó là urllib2. Làm ơn đừng làm thế. Python3 và Python2 là các thư viện khác nhau. Tất cả các bạn có thể muốn là urllib2 từ python2

import urllib2 
from urllib2 import Request 
req = Request("yoururl") 
res = urllib2.urlopen(req) 
+0

Tôi nghĩ rằng OP đã nhầm lẫn với các thẻ; nếu anh ta thực sự là trên Python 2.7, sẽ có một lỗi nhập khẩu, không phải là hành vi được nêu trong câu hỏi. –

+0

vâng, đúng vậy. nó được gắn thẻ sai. –

+0

Tốt bắt, tôi đã làm theo ví dụ này: http://www.nltk.org/book/ch03.html và tôi đã không nhận ra các ví dụ được gọi python3. Env của tôi là Python 2.7. 1 bình chọn, cảm ơn! – markc