プロが教える店舗&オフィスのセキュリティ対策術

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.py50
mainC:\Python26\src\myparser.py41
urlopenC:\Python26\Lib\urllib2.py124
openC:\Python26\Lib\urllib2.py383
_openC:\Python26\Lib\urllib2.py401
_call_chainC:\Python26\Lib\urllib2.py361
http_openC:\Python26\Lib\urllib2.py1130
do_openC:\Python26\Lib\urllib2.py1105
URLError: <urlopen error [Errno 11001] getaddrinfo failed>

ネットワーク環境は、プロキシ・サーバを返していますが、どうやっても上記のエラーで引っ掛かってしまいます。

A 回答 (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に対応していないとか、バグ入りだとかいう可能性はかなり低いと思います。
    • good
    • 0
この回答へのお礼

御礼が遅くなり、申し訳御座いません。

やはり、プロキシが悪さをしていました。


有難う御座いました。

お礼日時:2009/05/07 11:50

質問文が意味不明なので適当に回答すると、


urlopenの引数か環境変数に
お使いのプロキシを指定してください。
http://docs.python.org/library/urllib.html?highl …

質問を補足する場合、
以下の点を明らかにしてもらえるとありがたい。

- プロキシを返すとは?
- beautifulsoupを使っていないようだが?
- 本当にmyparser.pyをそのまま使ったのか?
(tracebackの行数が合わないし、urllibではなくurllib2を使っている)

この回答への補足

- プロキシを返すとは?
すみません、漢字変換ミスでした。
プロキシ・サーバーを経由している意味です。

- 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には対応していないのかなぁ? と思ったりもします。

以上、よろしくお願いします。

補足日時:2009/05/01 09:44
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!