5

urllib2 つのライブラリとをインポートしfrom urllib.request import urlopenました。

2 つ目は 1 つ目に含まれています。

コードを調べて行を削除しようとすると、次のfrom urllib.request import urlopenメッセージが表示されました。

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

行を復元するとfrom urllib.request import urlopen、コードが実行されます。

誰でも理由を説明できますか?

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()
4

3 に答える 3

7

python3 パッケージurllib.requestと Python2.7 パッケージを混同していますurllib2。お願い、それはやめて。Python3 と Python2 はライブラリが異なります。あなたが望むのはurllib2python2からだけです

import urllib2
from urllib2 import Request
req = Request("yoururl")
res = urllib2.urlopen(req)
于 2012-10-24T16:13:29.893 に答える
2

両方ともimport X、指定されたfrom X import Yモジュールまたはパッケージのインポートを実行しますX

この場合、urllibはパッケージです。するとimport urllib、パッケージ自体がインポートされ、それへの参照が取得されますが、サブモジュールはインポートされません (この場合)。するとfrom urllib.request import ...、Python は実際にはモジュール全体をインポートしurllib.requestますが、要求した名前を選択してそれらへの参照を提供します。

を使用していない場合でもurlopen、簡単に実行import urllib.requestして同じ結果を得ることができます。

于 2012-10-24T16:12:58.507 に答える
2

urllibパッケージはまさにパッケージです。__init__.pyインポートしないため、インポートするだけではurllib.request簡単にアクセスできません。これは名前空間としてのみ意図されています。urllib.requesturllib

代わりにインポートurllib.requestします。

于 2012-10-24T16:11:55.417 に答える