1

私は Python を初めて使用しますが、現在、Python を使用して Web スクレイピング スクリプトを作成する方法を学んでいます。しかし、何か奇妙なことが起こり続けており、その理由はわかりません。そして、少しテストした後、問題はurllib2.urlopen()機能にあると思います。聞いてください:

Python インタープリターを bash で開き、次のようpythonに入力します。

import urllib2
urllib2.urlopen("http://www.baidu.com/") # which is a Chinese version of Google that most of us use only to test if the network connection is fine

物事はかなり速く醜くなります:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/urllib2.py", line 127, in urlopen
    return _opener.open(url, data, timeout)
  File "/usr/lib/python2.7/urllib2.py", line 404, in open
    response = self._open(req, data)
  File "/usr/lib/python2.7/urllib2.py", line 422, in _open
    '_open', req)
  File "/usr/lib/python2.7/urllib2.py", line 382, in _call_chain
    result = func(*args)
  File "/usr/lib/python2.7/urllib2.py", line 1214, in http_open
    return self.do_open(httplib.HTTPConnection, req)
  File "/usr/lib/python2.7/urllib2.py", line 1184, in do_open
    raise URLError(err)
urllib2.URLError: <urlopen error [Errno 2] No such file or directory>

正確な意味はわかりませんが、ネットで調べてみました。結果のほとんどは私のケースでは役に立ちませんでしたが、sudoすべてを使用して問題なく動作すると主張する人もいました。

そこで、bash から python を開いてsudo python、上記とまったく同じコードを実行してみました。今回は永遠に行き詰まっているようです。最後に使用する必要KeyboardInterruptがあり、プログラムがスタックしている間どれだけ待っても、同じトレースバック結果が得られます。

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/urllib2.py", line 127, in urlopen
    return _opener.open(url, data, timeout)
  File "/usr/lib/python2.7/urllib2.py", line 404, in open
    response = self._open(req, data)
  File "/usr/lib/python2.7/urllib2.py", line 422, in _open
    '_open', req)
  File "/usr/lib/python2.7/urllib2.py", line 382, in _call_chain
    result = func(*args)
  File "/usr/lib/python2.7/urllib2.py", line 1214, in http_open
    return self.do_open(httplib.HTTPConnection, req)
  File "/usr/lib/python2.7/urllib2.py", line 1181, in do_open
    h.request(req.get_method(), req.get_selector(), req.data, headers)
  File "/usr/lib/python2.7/httplib.py", line 973, in request
    self._send_request(method, url, body, headers)
  File "/usr/lib/python2.7/httplib.py", line 1007, in _send_request
    self.endheaders(body)
  File "/usr/lib/python2.7/httplib.py", line 969, in endheaders
    self._send_output(message_body)
  File "/usr/lib/python2.7/httplib.py", line 829, in _send_output
    self.send(msg)
  File "/usr/lib/python2.7/httplib.py", line 791, in send
    self.connect()
  File "/usr/lib/python2.7/httplib.py", line 772, in connect
    self.timeout, self.source_address)
  File "/usr/lib/python2.7/socket.py", line 562, in create_connection
    sock.connect(sa)
  File "/usr/lib/python2.7/socket.py", line 224, in meth
    return getattr(self._sock,name)(*args)
KeyboardInterrupt

ポータブル フラッシュ ドライブから Ubuntu 13.04 デスクトップで python を実行していますが、現在は会社のプロキシの背後で実行しています。プロキシの問題かどうかわかりませんが、環境プロキシを設定しようとしました

$ export http_proxy="http://domain\username:password@proxyserver:port"

少なくとも正常にwget動作するようにします。

比較としてssh、自宅に戻ってデスクトップ コンピューターに戻って同じコードを実行すると、次のようなものがあってもなくても、すべて問題ないように見えますsudo

Python 2.7.3 (default, Apr 10 2013, 05:09:49) 
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import urllib2
>>> urllib2.urlopen("http://www.baidu.com/")
<addinfourl at 3071291372L whose fp = <socket._fileobject object at 0xb71d6eec>>
>>>     

ラップトップで自宅に戻って同じフラッシュドライブからUbuntuを実行しようとしましたが、それほど良くはありませんでしたが、詳細は覚えていません。家に持ち帰り、今日の仕事の後にテストして詳細を確認し、ここに投稿します。それまで、誰か助けて?

4

0 に答える 0