• 締切済み

python urlopen error について教えてください

pythonを、勉強したてです。 開発環境は、python2.6/win XP です。 HTMLを解析するために、 http://www.crummy.com/software/BeautifulSoup/ からライブラリーを入手して、C:\Python26\Lib\site-packages\BeautifulSoup-3.1.0.1 に配置しました。 python環境設定のパスは、通してあります。 プログラムは、http://www.freia.jp/taka/blog/169 の「myparser.py」をそのまま使いました。(動作テストのため) ------- 結果 -------- メッセージ ファイル名 行 位置 Traceback <module> C:\Python26\src\myparser.py 50 main C:\Python26\src\myparser.py 41 urlopen C:\Python26\Lib\urllib2.py 124 open C:\Python26\Lib\urllib2.py 383 _open C:\Python26\Lib\urllib2.py 401 _call_chain C:\Python26\Lib\urllib2.py 361 http_open C:\Python26\Lib\urllib2.py 1130 do_open C:\Python26\Lib\urllib2.py 1105 URLError: <urlopen error [Errno 11001] getaddrinfo failed> ネットワーク環境は、プロキシ・サーバを返していますが、どうやっても上記のエラーで引っ掛かってしまいます。

みんなの回答

  • struct
  • ベストアンサー率72% (32/44)
回答No.2

名前解決を行うgetaddrinfo関数がIOErrorを出してるんで やっぱりプロキシがうまく刺さってないんじゃないですか? プロキシを使う場合、クライアントは名前解決をしなくてもいいはずです。 一応、urllibライブラリはIEに設定されたプロキシの値を レジストリから自動的に読み取るようになっています。 まずインターネット・オプションにプロキシが正しく IPアドレスで指定されていることを確認してください。 それでもダメな場合は以下のように スクリプト内で直接プロキシを指定してみます。 (127.0.0.1:8080の部分を使っているプロキシで置き換えてください) urllib.urlopen(url, proxies={"http" : "http://127.0.0.1:8080"}) これでもtracebackに変化がなければ、 私では対処できません。 ちなみにurllibは初期のころから存在する使用頻度の高い標準ライブラリなので 2.6に対応していないとか、バグ入りだとかいう可能性はかなり低いと思います。

xcode_15
質問者

お礼

御礼が遅くなり、申し訳御座いません。 やはり、プロキシが悪さをしていました。 有難う御座いました。

  • struct
  • ベストアンサー率72% (32/44)
回答No.1

質問文が意味不明なので適当に回答すると、 urlopenの引数か環境変数に お使いのプロキシを指定してください。 http://docs.python.org/library/urllib.html?highlight=urlopen 質問を補足する場合、 以下の点を明らかにしてもらえるとありがたい。 - プロキシを返すとは? - beautifulsoupを使っていないようだが? - 本当にmyparser.pyをそのまま使ったのか? (tracebackの行数が合わないし、urllibではなくurllib2を使っている)

xcode_15
質問者

補足

- プロキシを返すとは? すみません、漢字変換ミスでした。 プロキシ・サーバーを経由している意味です。 - beautifulsoupを使っていないようだが? - 本当にmyparser.pyをそのまま使ったのか? 上記2点については、エラー処理の対応などで、混乱していたようです。 改めまして、myparser.pyをそのまま使って実行結果を示します。 やはり、エラー表示が出て Traceback (most recent call last): File "<string>", line 244, in run_nodebug File "C:\Python26\src\myparser.py", line 32, in <module> main(url) File "C:\Python26\src\myparser.py", line 21, in main data = urllib.urlopen( url ) File "C:\Python26\lib\urllib.py", line 87, in urlopen return opener.open(url) File "C:\Python26\lib\urllib.py", line 203, in open return getattr(self, name)(url) File "C:\Python26\lib\urllib.py", line 338, in open_http h.endheaders() File "C:\Python26\Lib\httplib.py", line 868, in endheaders self._send_output() File "C:\Python26\Lib\httplib.py", line 740, in _send_output self.send(msg) File "C:\Python26\Lib\httplib.py", line 699, in send self.connect() File "C:\Python26\Lib\httplib.py", line 683, in connect self.timeout) File "C:\Python26\lib\socket.py", line 498, in create_connection for res in getaddrinfo(host, port, 0, SOCK_STREAM): IOError: [Errno socket error] [Errno 11001] getaddrinfo failed "socket.py"の498行目 "for res in getaddrinfo(host, port, 0, SOCK_STREAM):" で、停止します。 エラー表示は、"IOError: [Errno socket error] [Errno 11001] getaddrinfo failed" でした。 urlopenってpython2.6には対応していないのかなぁ? と思ったりもします。 以上、よろしくお願いします。

関連するQ&A