web-dev-qa-db-ja.com

ValueError:urllib2の不明なurlタイプですが、ブラウザーで開いた場合は正常です

基本的に、Pythonでurllib2を使用してURLをダウンロードしようとしています。

コードは次のとおりです。

import urllib2
req = urllib2.Request('www.tattoo-cover.co.uk')
req.add_header('User-agent','Mozilla/5.0')
result = urllib2.urlopen(req)

これはValueErrorを出力し、プログラムは例のURLに対してクラッシュします。ブラウザでURLにアクセスすると、正常に動作します。

問題を処理する方法はありますか?

更新:

問題が検出されたベンジェームスとsthに感謝=>「http://」を追加

質問が洗練されました:いくつかの組み込み関数でこのようなケースを自動的に処理することは可能ですか、それとも後続の文字列連結でエラー処理を行う必要がありますか?

19
Nik

プロトコルなしでブラウザにURLを入力すると、デフォルトでHTTPになります。 urllib2はそのような仮定を行いません。その前にhttp://を付ける必要があります。

32
Ben James

ホスト名を指定するだけでなく、プロトコルを含む完全なURLを使用する必要があります。

正しいURLはhttp://www.tattoo-cover.co.uk/

5
sth

メソッドurlparse from urllib(Python 3)を使用して、アドレス指定スキーム(http、https、ftp)の存在を確認し、存在しない場合はスキームを連結できます。

In [1]: from urllib.parse import urlparse
    ..: 
    ..: url = 'www.myurl.com'
    ..: if not urlparse(url).scheme:
    ..:     url = 'http://' + url
    ..: 
    ..: url
Out[1]: 'http://www.myurl.com'

あなたは私が思うそのためにurlparse関数を使うことができます:

Pythonユーザードキュメント

0
inetphantom