# -*- 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:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 10-12: ordinal not in range(128)
Pero tampoco puedo usar .encode()
porque se quejará:
Traceback (most recent call last): File "t.py", line 8, in 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'
Alguien sabe como lidiar con eso?
Podría usar urllib.parse.quote () para codificar la sección de ruta 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()
La fantástica biblioteca de solicitudes hace esto de forma inmediata:
>>> url='http://zh.wikipedia.org/wiki/'+"毛泽东" >>> import requests >>> r = requests.get(url) >>> len(r.content) 818747
No puede usar cadenas Unicode arbitrarias como parte de una URL. La URL debe estar correctamente codificada. Vea aquí para más detalles:
http://www.w3schools.com/tags/ref_urlencode.asp
En particular, desea utilizar el método urllib.quote () o urllib.quote_plus () de la API de Python para citar correctamente su URL.