111 votes

Comment puis-je lire le contenu d'une URL avec Python ?

Le texte suivant fonctionne lorsque je le colle dans le navigateur :

http://www.somesite.com/details.pl?urn=2344

Mais lorsque j'essaie de lire l'URL avec Python, rien ne se passe :

 link = 'http://www.somesite.com/details.pl?urn=2344'
 f = urllib.urlopen(link)           
 myfile = f.readline()  
 print myfile

Dois-je coder l'URL, ou y a-t-il quelque chose que je ne vois pas ?

187voto

woozyking Points 836

Pour répondre à votre question :

import urllib

link = "http://www.somesite.com/details.pl?urn=2344"
f = urllib.urlopen(link)
myfile = f.read()
print(myfile)

Vous devez read() pas readline()

MODIFIER (2018-06-25) : Depuis Python 3, l'héritage urllib.urlopen() a été remplacé par urllib.request.urlopen() (voir les notes de https://docs.python.org/3/library/urllib.request.html#urllib.request.urlopen pour plus de détails).

Si vous utilisez Python 3, consultez les réponses de Martin Thoma ou de i.n.n.m dans cette question : https://stackoverflow.com/a/28040508/158111 (compatible avec Python 2/3) https://stackoverflow.com/a/45886824/158111 (Python 3)

Ou, prenez juste cette bibliothèque ici : http://docs.python-requests.org/en/latest/ et l'utiliser sérieusement :)

import requests

link = "http://www.somesite.com/details.pl?urn=2344"
f = requests.get(link)
print(f.text)

36voto

i.n.n.m Points 1089

Pour python3 utilisateurs, pour gagner du temps, utilisez le code suivant,

from urllib.request import urlopen

link = "https://docs.scipy.org/doc/numpy/user/basics.broadcasting.html"

f = urlopen(link)
myfile = f.read()
print(myfile)

Je sais qu'il y a différents fils pour les erreurs : Name Error: urlopen is not defined mais j'ai pensé que cela pourrait me faire gagner du temps.

19voto

Jared Points 336

Aucune de ces réponses n'est très bonne pour Python 3 (testé sur la dernière version au moment de cet article).

C'est comme ça qu'il faut faire...

import urllib.request

try:
   with urllib.request.urlopen('http://www.python.org/') as f:
      print(f.read().decode('utf-8'))
except urllib.error.URLError as e:
   print(e.reason)

Ce qui précède concerne les contenus qui renvoient "utf-8". Supprimez .decode('utf-8') si vous voulez que python "devine le codage approprié".

Documentation : https://docs.python.org/3/library/urllib.request.html#module-urllib.request

11voto

moose Points 4945

Une solution qui fonctionne avec Python 2.X et Python 3.X utilise la bibliothèque de compatibilité Python 2 et 3. six :

from six.moves.urllib.request import urlopen
link = "http://www.somesite.com/details.pl?urn=2344"
response = urlopen(link)
content = response.read()
print(content)

1voto

Akash Kinwad Points 418

Nous pouvons lire le contenu html du site web comme suit :

from urllib.request import urlopen
response = urlopen('http://google.com/')
html = response.read()
print(html)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X