67 votes

Que dois-je utiliser pour ouvrir une url au lieu de urlopen dans urllib3 ?

Je voulais écrire un morceau de code comme le suivant :

from bs4 import BeautifulSoup
import urllib2

url = 'http://www.thefamouspeople.com/singers.php'
html = urllib2.urlopen(url)
soup = BeautifulSoup(html)

Mais j'ai découvert que je dois installer urllib3 paquet maintenant.

De plus, je n'ai trouvé aucun tutoriel ou exemple permettant de comprendre comment réécrire le code ci-dessus, par exemple, urllib3 n'a pas urlopen .

Une explication ou un exemple, s'il vous plaît !

P/S : J'utilise python 3.4.

2 votes

Pourquoi faut-il installer urllib3 alors que l'exemple fonctionne ?

1 votes

Parce que ça ne fonctionne pas pour moi, pas d'urllib2 trouvé.

2 votes

@niloofar Python 3.4 a urllib2 nommé comme urllib. from urllib import urlopen devrait fonctionner dans ce cas.

55voto

shazow Points 1021

Urllib3 est une bibliothèque différente de urllib et urllib2. Elle possède beaucoup de fonctionnalités supplémentaires par rapport aux urllib de la bibliothèque standard, si vous en avez besoin, des choses comme la réutilisation des connexions. La documentation est ici : https://urllib3.readthedocs.org/

Si vous souhaitez utiliser urllib3, vous devrez pip install urllib3 . Un exemple de base ressemble à ceci :

from bs4 import BeautifulSoup
import urllib3

http = urllib3.PoolManager()

url = 'http://www.thefamouspeople.com/singers.php'
response = http.request('GET', url)
soup = BeautifulSoup(response.data)

0 votes

response.read() ne fonctionne pas, du moins dans Python 2.7. Selon la documentation urllib3.readthedocs.io/fr/latest/guide-utilisateur.html il devrait l'être html = response.data .

0 votes

Cet exemple me donne une erreur d'exception (urllib3.exceptions.MaxRetryError) python3

39voto

alecxe Points 50783

Vous ne devez pas installer urllib3 . Vous pouvez choisir n'importe quelle bibliothèque de création de requêtes HTTP qui correspond à vos besoins et envoyer la réponse à BeautifulSoup . Le choix est cependant généralement requests en raison de la richesse de ses fonctionnalités et de son API pratique. Vous pouvez installer requests en entrant pip install requests dans la ligne de commande. Voici un exemple de base :

from bs4 import BeautifulSoup
import requests

url = "url"
response = requests.get(url)

soup = BeautifulSoup(response.content, "html.parser")

1 votes

Pour info, vous devez toujours installer requests si vous souhaitez utiliser les requêtes. Aucun d'entre eux n'est fourni en natif avec Python.

2 votes

Les demandes dépendent de urllib3.

0 votes

@CeesTimmerman J'ai essayé des requêtes sans urlib3 et ça marche, pourquoi ça dépend d'urllib3 ?

11voto

Lan Vukušič Points 25

Le nouveau urllib3 a une bonne documentation aquí
Afin d'obtenir le résultat souhaité, vous devez suivre ces instructions :

Import urllib3
from bs4 import BeautifulSoup

url = 'http://www.thefamouspeople.com/singers.php'

http = urllib3.PoolManager()
response = http.request('GET', url)
soup = BeautifulSoup(response.data.decode('utf-8'))

La partie "decode utf-8" est optionnelle. Cela a fonctionné sans elle quand j'ai essayé, mais j'ai quand même mis l'option en ligne.
Source : Guide de l'utilisateur

0 votes

Demande simplement l'utilisation d'urllib3 en coulisses

1 votes

@PirateApp C'est le cas.

0voto

emehex Points 2250

Con gazpacho vous pourriez transformer la page directement en un objet de soupe analysable :

from gazpacho import Soup
url = "http://www.thefamouspeople.com/singers.php"
soup = Soup.get(url)

Et faire des trouvailles par-dessus le marché :

soup.find("div")

0voto

Heba Hashim Points 61

Dans urlip3, il n'y a pas de .urlopen essayez plutôt ceci :

import requests
html = requests.get(url)

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