2016-04-09 32 views
21

Volevo scrivere un codice come prima ... in questo modo:cosa devo usare al posto di urlopen in urllib3

from bs4 import BeautifulSoup 
import urllib2 

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

ma ho trovato devo installare urllib3 ora.

Ma coudntfind qualsiasi tutorial o esempio per capire come riscrivere il codice precedente, ad esempio, urllib3 non ha urlopen.

Qualsiasi spiegazione o esempio, per favore ?!

Sto usando python 3.4.

+1

perché è necessario installare urllib3 quando l'esempio funziona? – Deusdeorum

+1

Perché non funziona per me, nessun urllib2 trovato. – niloofar

+1

@niloofar Python 3.4 ha urllib2 denominato urllib. 'da urllib import urlopen' dovrebbe funzionare per questo caso. –

risposta

6

Non è necessario installare urllib3. È possibile scegliere qualsiasi libreria di richiesta HTTP che soddisfi le proprie esigenze e fornire la risposta a BeautifulSoup. La scelta è però di solito requests a causa del ricco set di funzioni e dell'API conveniente. È possibile installare requests immettendo pip install requests nella riga di comando. Ecco un esempio di base:

from bs4 import BeautifulSoup 
import requests 

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

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

FWIW, è ancora necessario _installare richieste se si desidera utilizzare le richieste. Nessuno dei due è nativo con Python. – shazow

17

urllib3 è una libreria diversa da urllib e urllib2. Ha molte funzioni aggiuntive per le urllibs nella libreria standard, se ne hai bisogno, cose come ri-usare le connessioni. La documentazione è qui: https://urllib3.readthedocs.org/

Se si desidera utilizzare urllib3, è necessario pip install urllib3. Un esempio di base si presenta così:

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

'response.read()' non funziona almeno in Python 2.7. Come da documentazione https://urllib3.readthedocs.io/en/latest/user-guide.html dovrebbe essere 'html = response.data'. – RajeshM

+0

Grazie, l'ho aggiornato. – shazow

2

Il nuovo urllib3 biblioteca ha una bella documentazione here
Al fine di ottenere il risultato desiderato si shuld segue che:

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')) 

Il "decodificare utf -8 "parte è facoltativa. Ha funzionato senza di esso quando ho provato, ma ho postato l'opzione comunque.
Fonte: User Guide