2012-08-05 15 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 

जब मैंने इसे चलाने के लिए, यह शिकायत है कि:python3 में यूआरएल में यूनिकोड स्ट्रिंग से कैसे निपटें?

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

लेकिन मैं .encode() उपयोग नहीं कर सकते या तो के रूप में यह शिकायत:

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' 

किसी को भी है कि के साथ सौदा करने के लिए कैसे जानता है ?

+1

URL पैरामीटर urllib.quote() का उपयोग करके उचित रूप से उद्धृत किया जाना चाहिए –

उत्तर

19

आप urllib.parse.quote() इस्तेमाल कर सकते हैं 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() 
2

आप यूआरएल के हिस्से के रूप में मनमाने ढंग से यूनिकोड स्ट्रिंग का उपयोग नहीं कर सकते हैं। यूआरएल ठीक से एन्कोड किया जाना चाहिए। विवरण के लिए यहां देखें:

http://www.w3schools.com/tags/ref_urlencode.asp

विशेष रूप से यदि आप अपने URL ठीक से उद्धृत urllib.quote() या अजगर एपीआई के urllib.quote_plus() विधि उपयोग करना चाहते हैं।

http://docs.python.org/library/urllib.html

11

शानदार requests पुस्तकालय बॉक्स से बाहर आप के लिए यह करता है:

>>> url='http://zh.wikipedia.org/wiki/'+"毛泽东" 
>>> import requests 
>>> r = requests.get(url) 
>>> len(r.content) 
818747 
संबंधित मुद्दे