2012-07-11 19 views
20

अनुरोध और मैं की सामग्री को क्वेरी करने के लिए एक वेब पेज URL से एक लेख प्राप्त करने के लिए पुस्तकालय अनुरोध Diffbot एपीआई का उपयोग कर रहा हूँ।पायथन यूनिकोड

{ "आइकन": जब मैं एक अनुरोध URL मैं अपने ब्राउज़र में बनाने यही जाते हैं, तो यह यूनिकोड में पाठ के साथ एक JSON ऑब्जेक्ट (? दाएं) उदाहरण के लिए (मैं पाठ कुछ हद तक shortended) "http : //mexico.cnn.com/images/ico_mobile.jpg "," पाठ ":" Ciudad de मेक्सिको (CNNMéxico) \ u2014 Kassandra कानो Guazo 32 है, लेकिन रविवार एक चुनावी \ में पहली भाग लिया। n \ "वहाँ मेरी (क्रेडेंशियल) IFE (संघीय निर्वाचन संस्थान) मिला nSánchez था, क्योंकि प्रक्रिया बनाने वहाँ बहुत उपहास जब वे देखते हैं आपके नाम अपने नए पहचान के अनुसार अपने और अन्य दस्तावेजों से मेल नहीं खाता है। \ वह कहता है कि आवेदकों साथ भेदभाव नहीं कर रहे हैं दो, लेकिन अनुभव अलग है Kassanda: \ "आप एक वकील, दो विशेषज्ञों (एक एंडोक्राइनोलॉजिस्ट सहित) भुगतान करना होगा। इसके अलावा, नाम बदलने के लिए और अगर यह अनुकूल नहीं है न्यायाधीश सजा चार साल इंतजार करना फिर से मुकदमा करने के लिए नागरिक पंजीकरण \ "नहीं है। \ Nante यह स्थिति, रोकथाम और sculina के उन्मूलन के लिए परिषद, ट्रांसजेंडर वोट - मेक्सिको: वोट 2012 - राष्ट्रीय "," url ":" http://mexico.cnn.com/nacional/2012/07/02/con-apariencia-de-mujer-e-identidad-masculina- ट्रांस वोट "," xpath ""/HTML [1]/शरीर [1]/अनुभाग [5]/DIV [1]/लेख [1]/DIV [1]/DIV [6] "}

जब मैं अजगर पुस्तकालय अनुरोध का उपयोग इस प्रकार है:

def get_article(self, params={}): 
    api_endpoint = 'http://www.diffbot.com/api/article' 
    params.update({ 
    'token': self.dev_token, 
    'format': self.output_format, 
    }) 
    req = requests.get(api_endpoint, params=params) 
    return json.loads(req.content) 

यह रिटर्न इस (फिर पाठ मैं कुछ हद तक छोटा है कि ध्यान दें):

{u'url ': u'http: //mexico.cnn.com/nacional/2012/07/02/ साथ-उपस्थिति के- स्त्री-ए-पहचान-पुरुष-ट्रांसजेंडर-वोट ', u'text': u'CIUDAD एम \ xc9XICO (CNNM \ xe9xico) \ u2014 Kassandra Guazo कानो 32 \ xf1os है लेकिन रविवार को एक विकल्प \ xf3n में xf3 पहले \ भाग लिया। \ n "नहीं Hab \ Xeda मेरी (क्रेडेंशियल) IFE (संघीय निर्वाचन संस्थान) मिल गया क्योंकि hacOyuky मार्ट \ xednez कर्नल \ xedn, भी \ xe9n transg \ xe9nero, और साथ \ अपने दो बेटों 012,351,641 के xf1ada थाऔर मम् \ XE1। \ समर्थन केंद्र ट्रांस पहचान, ई.पू., जहां वे यौन रोगों के रोकथाम \ xf3n का एक अभियान \ xf1a में भाग लेने में कार्यकर्ताओं के रूप में Nambas काम करते हैं। \ N "किशी \ xe9ramos है कि न केवल हमें यौनकर्मियों या स्टाइलिस्ट के रूप में देखते हैं, लेकिन हमारे अधिकारों के लिए लड़ाई कहते हैं, "Kassandra जबकि मुस्कान \ xede, उसकी मतदाता पकड़े और ', u'title' अपने अंगूठे करार को जन्म देती है। u'Con उपस्थिति महिला और पुरुष पहचान, transg \ xe9nero वोट - एम \ xe9xico: वोट 2012 - राष्ट्रीय 'u'xpath': यू '/ HTML [1]/शरीर [1]/अनुभाग [5]/DIV [1]/लेख [1]/DIV [1]/DIV [6] ' u'icon': u'http: //mexico.cnn.com/images/ico_mobile.jpg '}

012,

मैं काफी यूनिकोड समझ में नहीं आता। कैसे यकीन है कि मुझे क्या अभी भी यूनिकोड अनुरोध है कि के साथ हो जाओ करने के लिए?

+0

की तरह आपको लगता है कि json परिणाम में यूनिकोड तार है लग रहा है। "यू" ... नोटेशन पर ध्यान दें? आप कुछ परिणामों के प्रकार की जांच भी कर सकते हैं: 'टाइप (परिणाम [' टेक्स्ट ']) '। http://docs.python.org/howto/unicode.html – istruble

+0

धन्यवाद! मुझे लगता है कि यह वास्तव में यू 'के साथ यूनिकोड है, हालांकि यह प्राथमिकता (ब्राउज़र में) के बजाय prevenci \ xf3n (अनुरोधों का उपयोग करते समय) कहता है। मैं इसे कैसे बना सकता हूं कि prevenci \ xf3n पसंद है? – Javaaaa

+1

यह सिर्फ पुरानी पुरानी स्ट्रिंग शाब्दिक वाक्यविन्यास है। पायथन आपको \ xc9' दिखाता है क्योंकि यह सभी कंसोल पर प्रिंट करना सुरक्षित है, जबकि 'ई' उन कंसोल पर असफल होगा जो यूनिकोड को सही तरीके से समर्थन नहीं देते हैं। यदि आपका कंसोल काम कर रहा है, तो आप देख सकते हैं कि वे वही हैं। '>>> यू 'सियुडैड डी एम \ xc9XICO' == यू 'सियुड डे डेक्सिको' सच है। – bobince

उत्तर

34

req.content के बजाय आप req.text का उपयोग कर यह सुनिश्चित करने के लिए कि आप यूनिकोड प्राप्त कर सकें। तरीकों में वर्णित हैं:

http://docs.python-requests.org/en/latest/api/#main-interface

+2

अनुरोधों के साथ एक यूनिकोड JSON प्रतिक्रिया प्राप्त करने का कोई तरीका नहीं है? ऐसा लगता है कि यूनिकोड के बिना टर्मिनल पर जेएसओएन प्रतिक्रिया मुद्रित करने का एकमात्र तरीका जेएसओएन को स्ट्रिंग के रूप में मुद्रित करना है, लेकिन फिर भी यह एक स्ट्रिंग के रूप में डेटा संरचना नहीं है। क्या अनुरोध प्रतिक्रियाओं को "शुद्ध" JSON के रूप में डेटा संरचना के रूप में अभी भी निपटने का कोई तरीका है लेकिन बिना यूनिकोड के? – AdjunctProfessorFalcon

+2

एनबी: कुछ मामलों में कच्चे बाइट्स को यूटीएफ -8 में परिवर्तित करने के लिए 'respond.content.decode (' utf-8 ')' करना आवश्यक है। –

11

के संबंध में "मैं काफी यूनिकोड समझ में नहीं आता" वहाँ यूनिकोड पर योएल Spolsky द्वारा एक entertaining primer और सरकारी Python Unicode HowTo जो एक 10 मिनट पढ़ा है और सब कुछ अजगर विशिष्ट को शामिल किया गया है।

requests docs का कहना है कि अनुरोध हमेशा यूनिकोड वापस आ जाएगी, और उदाहरण सामग्री आप पोस्ट तथ्य यूनिकोड (u'' स्ट्रिंग वाक्य रचना नोटिस? यही कारण है कि यूनिकोड स्ट्रिंग्स के लिए पायथन के वाक्य रचना है।) में है, इसलिए वहाँ कोई समस्या नहीं है। ध्यान दें कि यदि आप किसी वेब ब्राउज़र में JSON प्रतिक्रिया देखते हैं, तो u'' वहां नहीं होगा क्योंकि यह एक संपत्ति है कि पायथन एक स्ट्रिंग कैसे संग्रहीत करता है।

यदि आपके आवेदन के लिए यूनिकोड महत्वपूर्ण है, तो कृपया वास्तव में यूनिकोड के बारे में जानने के बिना सामना करने का प्रयास न करें। आप दर्द की दुनिया में हैं, चरित्र सेट मुद्दे डीबग करने के लिए बेहद निराशाजनक हैं यदि आप नहीं जानते कि आप क्या कर रहे हैं। ऊपर वर्णित दोनों लेखों को पढ़ना शायद आधे घंटे लग सकता है।

+1

उन लिंक में जोड़ें पायथन में व्यावहारिक यूनिकोड पर नेड बैटचेल्डर की उत्कृष्ट प्रस्तुति: http://nedbatchelder.com/text/unipain.html – bgporter

+0

धन्यवाद! मुझे लगता है कि यह वास्तव में यू 'के साथ यूनिकोड है, हालांकि यह प्राथमिकता (ब्राउज़र में) के बजाय prevenci \ xf3n (अनुरोधों का उपयोग करते समय) कहता है। मैं इसे कैसे बना सकता हूं कि prevenci \ xf3n पसंद है? – Javaaaa

+0

पायथन प्रत्येक गैर-ASCII वर्ण के लिए '\ xf3' जैसे बचने के अनुक्रम का उपयोग करता है * * एक यूनिकोड स्ट्रिंग प्रदर्शित करता है। Http://www.unicode.org/charts/ पर यूनिकोड चार्ट को देखते हुए, आप देखेंगे कि यह एक "ó" है, इसलिए यह ठीक है। यदि आप वास्तविक चरित्र देखना चाहते हैं, तो आपको यूनिकोड स्ट्रिंग को एन्कोड करना होगा। – Simon

संबंधित मुद्दे