web-dev-qa-db-fra.com

ValueError: type d'URL inconnu dans urllib2, bien que l'URL soit correcte si elle est ouverte dans un navigateur

En gros, j'essaye de télécharger une URL en utilisant urllib2 en python.

le code est le suivant:

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

il génère ValueError et le programme écrase l'URL dans l'exemple. Lorsque j'accède à l'URL dans un navigateur, cela fonctionne correctement.

Des idées comment gérer le problème?

METTRE À JOUR:

merci pour Ben James et qch le problème est détecté => ajoutez 'http: //'

Maintenant, la question est raffinée: Est-il possible de gérer de tels cas automatiquement avec une fonction intégrée ou dois-je gérer les erreurs avec une concaténation de chaînes ultérieure?

18
Nik

Lorsque vous entrez une URL dans un navigateur sans protocole, HTTP est sélectionné par défaut. urllib2 ne fera pas cette hypothèse pour vous; vous devez le préfixer avec http://.

30
Ben James

Vous devez utiliser une URL complète, y compris le protocole, et pas seulement spécifier un nom d'hôte.

L'URL correcte serait http://www.tattoo-cover.co.uk/.

5
sth

Vous pouvez utiliser la méthode urlparse de urllib (Python 3) pour vérifier la présence d’un schéma d’adressage (http, https, ftp) et le concaténer s’il n’est pas présent:

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'

Vous pouvez utiliser la fonction urlparse pour cela, je pense :

Documentation utilisateur Python

0
inetphantom