1

以前に Windows XP マシンに Python 2.6.2 をインストールし、次のコードを実行しました。

import urllib2
import urllib

page = urllib2.Request('http://www.python.org/fish.html')
urllib2.urlopen( page )

次のエラーが表示されます。

Traceback (most recent call last):<br>
  File "C:\Python26\test3.py", line 6, in <module><br>
    urllib2.urlopen( page )<br>
  File "C:\Python26\lib\urllib2.py", line 124, in urlopen<br>
    return _opener.open(url, data, timeout)<br>
  File "C:\Python26\lib\urllib2.py", line 383, in open<br>
    response = self._open(req, data)<br>
  File "C:\Python26\lib\urllib2.py", line 401, in _open<br>
    '_open', req)<br>
  File "C:\Python26\lib\urllib2.py", line 361, in _call_chain<br>
    result = func(*args)<br>
  File "C:\Python26\lib\urllib2.py", line 1130, in http_open<br>
    return self.do_open(httplib.HTTPConnection, req)<br>
  File "C:\Python26\lib\urllib2.py", line 1105, in do_open<br>
    raise URLError(err)<br>
URLError: <urlopen error [Errno 11001] getaddrinfo failed><br><br><br>
4

5 に答える 5

4
import urllib2
response = urllib2.urlopen('http://www.python.org/fish.html')
html = response.read()

あなたはそれを間違っています。

于 2009-08-17T20:13:51.540 に答える
3

トレースバックで指定された行で、urllib2 ソースを見てください。

File "C:\Python26\lib\urllib2.py", line 1105, in do_open
raise URLError(err)

次のフラグメントが表示されます。

    try:
        h.request(req.get_method(), req.get_selector(), req.data, headers)
        r = h.getresponse()
    except socket.error, err: # XXX what error?
        raise URLError(err)

したがって、ソースはソケット エラーであり、HTTP プロトコル関連のエラーではないようです。考えられる理由: オンラインではない、制限の厳しいファイアウォールの内側にいる、DNS がダウンしている、など。

mcandreが指摘したように、あなたのコードが間違っているという事実は別として。

于 2009-08-18T07:09:08.723 に答える
2

名前解決エラー。

getaddrinfoは、リクエスト内のホスト名 ( python.org) を解決するために使用されます。失敗した場合は、次の理由で名前を解決できなかったことを意味します。

  1. 存在しないか、記録が古くなっています (可能性は低いです。python.org は十分に確立されたドメイン名です)。
  2. DNS サーバーがダウンしています (可能性は低いです。他のサイトを参照できる場合は、Python を介してそのページを取得できるはずです)
  3. ファイアウォールが、Python またはスクリプトによるインターネット アクセスをブロックしています (ほとんどの場合、Windows ファイアウォールは、アプリケーションを許可するかどうかを確認しません)。
  4. あなたは古代のブードゥー墓地に住んでいます。(可能性は低いです。その場合は、引っ越すべきです)
于 2012-11-04T19:30:39.083 に答える
1

Windows Vista、パイソン 2.6.2

404ページですよね?

>>> import urllib2
>>> import urllib
>>>
>>> page = urllib2.Request('http://www.python.org/fish.html')
>>> urllib2.urlopen( page )
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python26\lib\urllib2.py", line 124, in urlopen
    return _opener.open(url, data, timeout)
  File "C:\Python26\lib\urllib2.py", line 389, in open
    response = meth(req, response)
  File "C:\Python26\lib\urllib2.py", line 502, in http_response
    'http', request, response, code, msg, hdrs)
  File "C:\Python26\lib\urllib2.py", line 427, in error
    return self._call_chain(*args)
  File "C:\Python26\lib\urllib2.py", line 361, in _call_chain
    result = func(*args)
  File "C:\Python26\lib\urllib2.py", line 510, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 404: Not Found
>>>
于 2009-08-17T21:28:15.617 に答える
0

DJ

まず、urllib をインポートする理由がわかりません。私は、urllib2 が urllib を完全に置き換えるために使用されているのを見たことがあります。

次に、http: //www.python.org/fish.html で 404 エラーが発生することに気付きました。(それはあなたが見ているバックトレース/例外を説明していません.urllib2.HTTPError: HTTP Error 404: Not Found

通常、(特別な HTTP ヘッダーを追加したり、何らかの POST を実行したりせずに) Web ページのデフォルトのフェッチを実行したいだけの場合は、次のようにすれば十分です:

req = urllib2.urlopen('http://www.python.org/')
html = req.read()
# and req.close() if you want to be pedantic
于 2009-08-17T21:42:05.153 に答える