2012-08-05 21 views
13
# -*- coding: utf-8 -*- 
# Python3 
import urllib 
import urllib.request as url_req 
opener = url_req.build_opener() 
url='http://zh.wikipedia.org/wiki/'+"毛泽东" 
opener.open(url).read() 
# opener.open(url.encode("utf-8")).read() 
# # doesn't work either 

Cuando lo ejecuto, se queja de que:¿Cómo lidiar con cadena unicode en URL en python3?

UnicodeEncodeError: 'ascii' codec can't encode characters in position 10-12: ordinal not in range(128)

pero no puedo utilizar ya sea como .encode() se quejará:

Traceback (most recent call last): 
    File "t.py", line 8, in <module> 
    opener.open(url.encode("utf-8")).read() 
    File "/usr/local/Cellar/python3/3.2.2/lib/python3.2/urllib/request.py", line 360, in open 
    req.timeout = timeout 
AttributeError: 'bytes' object has no attribute 'timeout' 

Cualquiera sabe cómo lidiar con eso ?

+1

parámetros de URL se debe citar correctamente usando urllib.quote() –

Respuesta

19

usted podría utilizar urllib.parse.quote() para codificar la sección de camino de la URL.

#!/usr/bin/env python3 
from urllib.parse import quote 
from urllib.request import urlopen 

url = 'http://zh.wikipedia.org/wiki/' + quote("毛泽东") 
content = urlopen(url).read() 
11

El fantástico requests biblioteca lo hace por usted fuera de la caja:

>>> url='http://zh.wikipedia.org/wiki/'+"毛泽东" 
>>> import requests 
>>> r = requests.get(url) 
>>> len(r.content) 
818747