(Python 3.4.2)スクリプト内で「urllib.request.urlopen(url)」を実行すると、奇妙なエラーが発生します。 Pythonインタープリターで直接実行すると、正常に動作しますが、bashシェル(Linux)を介してスクリプト内で実行すると動作しません。
'string.join'メソッドを使用して文字列を作成しているためか、 'url'文字列と関係があると思います。
import urllib.request
url = "".join((baseurl, other_string, midurl, query))
response = urllib.request.urlopen(url)
'url'文字列は完全に出力されますが、 'response'文字列を作成しようとすると、次の出力が得られます。
File "./script.py", line 124, in <module>
response = urllib.request.urlopen(url)
File "/usr/lib/python3.4/urllib/request.py", line 153, in urlopen
return opener.open(url, data, timeout)
File "/usr/lib/python3.4/urllib/request.py", line 455, in open
response = self._open(req, data)
File "/usr/lib/python3.4/urllib/request.py", line 478, in _open
'unknown_open', req)
File "/usr/lib/python3.4/urllib/request.py", line 433, in _call_chain
result = func(*args)
File "/usr/lib/python3.4/urllib/request.py", line 1244, in unknown_open
raise URLError('unknown url type: %s' % type)
urllib.error.URLError: <urlopen error unknown url type: 'https>
Pythonは私のコンピューターでSSLサポートを使用してコンパイルされました(これらのコマンドはPythonインタープリターで完全に機能します)。
また、「url」文字列を「repr(url)」および「str(url)」でラップしてみました。私もこれを試しました:
url = "".join(("'", baseurl, other_string, midurl, query, "'"))
誰が何が起こっているのか知っていますか?
-----編集-----
私はそれを考え出した。私のURLには「:」が含まれていましたが、urllibはそれを気に入らなかったと思います。 「%3A」に置き換えて動作しています。
文字列を手動で結合する代わりに、urllib.parse.urlencode()
、urllib.parse.urljoin()
などの関数を使用してURLを作成する必要があります。 :
-> %3A
変換を処理します。例:
>>> import urllib.parse
>>> urllib.parse.quote(':')
'%3A'
インストールしない場合、openssl-develが原因である可能性があります。
yum list installed|grep openssl
それをインストールし、作成後に再試行してください。
Sudo yum install openssl-devel
./configure
make
私はそれを考え出した。私のURLには:
が含まれており、urllib
はその文字を使用できません。 %3A
に置き換えて、動作しています。 Webブラウザは通常:
を%3A
に自動的に変換しますが、urllib
では最初に変換する必要があります。