2012-09-13 15 views
7

का उपयोग कर जापानी अक्षरों को सही ढंग से स्क्रैपिंग और प्रदर्शित करना मैं पाइथन, कर्ल और सुंदर सूप का उपयोग करके जापानी में एक पृष्ठ को स्क्रैप करने की कोशिश कर रहा हूं। मैं फिर पाठ को एक MySQL डेटाबेस में सहेजता हूं जो utf-8 एन्कोडिंग का उपयोग कर रहा है, और Django का उपयोग कर परिणामी डेटा प्रदर्शित करता है।पाइथन Django सुंदर सूप और कर्ल

https://www.cisco.apply2jobs.com/ProfExt/index.cfm?fuseaction=mExternal.showJob&RID=930026&CurrentPage=180

मैं एक समारोह मैं एक स्ट्रिंग के रूप एचटीएमएल निकालने के लिए उपयोग किया है::

def get_html(url): 
    c = Curl() 
    storage = StringIO() 
    c.setopt(c.URL, str(url)) 
    cookie_file = 'cookie.txt' 
    c.setopt(c.COOKIEFILE, cookie_file) 
    c.setopt(c.COOKIEJAR, cookie_file) 
    c.setopt(c.WRITEFUNCTION, storage.write) 
    c.perform() 
    c.close() 
    return storage.getvalue() 

मैं तो BeautifulSoup को इसे पारित:

यहाँ एक उदाहरण यूआरएल है

html = get_html(str(scheduled_import.url)) 
soup = BeautifulSoup(html) 

इसे तब पार्स किया गया है और इसे डेटाबेस में सहेजा गया है। मैं जेसन को डेटा आउटपुट करने के लिए Django का उपयोग करता हूं।

def get_jobs(request): 
    jobs = Job.objects.all().only(*fields) 
    joblist = [] 
    for job in jobs: 
     job_dict = {} 
     for field in fields: 
      job_dict[field] = getattr(job, field) 
     joblist.append(job_dict) 
    return HttpResponse(dumps(joblist), mimetype='application/javascript') 

परिणाम पृष्ठ पर बाईटकोड जैसे::

XE3 \ x82 \ xb7 \ XE3 \ x83 \ xa3 \ XE3 \ x83 \ XAA \ XE3 \ x82 \ यहाँ दृश्य मैं उपयोग कर रहा हूँ है xb9 \ xe3 \ x83 \ x88

\ xe8 \ x81 \ xb7 \ xe5 \ x8b \ x99 \ xe5 \ x86 \ x85 \ xe5 \ xae \ xb9
\ xe3 \ x82 \ xb7 \ xe3 \ x82 \ xb9 \ xe3 \ x82 \ xb3 \ XE3 \ x82 \ xb7 \ XE3 \ x82 \ XB9 \ XE3 \ x83 \ x86 \ XE3 \ x83 \ xa0 \ XE3 \ x82 \ xba \ XE3 \ x81 \ xAE \ XE3 \ x82 \ xb3 \ XE3 \ x83 कॉपीराइट \ xA9 \ XE3 \ x83 \ x9c \ XE3 \ x83 \ XAC \ XE3 \ x83 \ XBC \ XE3 \ x82 \ xb7 \ XE3 \ x83 \ xa7 \ XE3 \ x83 \ xb3 \ XE4 \ xba \ x8b \ XE6 \ xa5 \ xad \ xe9 \ x83 \ xa8 \ XE3 \ x81 \ xa7 \ XE3 \ x81 \ XAF \ XE3 \ x80 \ x81 \ XE4 \ xba \ xba \ XE3 \ x82 \ x92 \ XE4 \ xb8 \ xad \ xe5 \ xbf \ x83 \ XE3 \ x81 \ xa8 \ XE3 \ x81 \ x97 \ XE3 \ x81 \ x9f \ XE3 \ x82 \ xb3 \ XE3 \ x83 \ x9f \ XE3 \ x83 \ Xa5 \ XE3 \ x83 \ x8b \ XE3 \ x82 \ xb1 \ XE3 \ x83 \ XBC \ XE3 \ x82 \ xb7 \ XE3 \ x83 \ xa7 \ XE3 \ x83 \ xb3 \ XE3 \ x81 \ xab \ XE3 \ x82 \ x88 \ xe3 \ x82 \ x8a \ xe3 \

जापानी के बजाय।

मैं पूरे दिन शोध कर रहा हूं और अपना डीबी यूटीएफ -8 में परिवर्तित कर चुका हूं, आईएसओ -885 9 -1 से पाठ को डीकोड करने और यूटीएफ -8 में एन्कोडिंग करने का प्रयास किया है।

असल में मुझे नहीं पता कि मैं क्या कर रहा हूं और किसी भी मदद या सुझाव की सराहना करता हूं ताकि मैं इसे समझने की कोशिश कर रहा हूं।

+0

आप खूबसूरत सूप को एन्कोडिंग बताना भूल गए। इसे प्रतिक्रिया शीर्षकों से प्राप्त करें। –

+0

मेरा मानना ​​है कि सुंदरता सूप स्वचालित रूप से पेज के मेटा टैग के आधार पर एन्कोडिंग सेट करता है, इस http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html "ए टैग दस्तावेज़ के लिए एन्कोडिंग निर्दिष्ट कर सकता है। " और soup.originalEncoding आउटपुट 'iso-8859-1' –

+0

आप मान रहे हैं कि पृष्ठ * पढ़ने के लिए एक मेटा टैग है। इस मामले में –

उत्तर

0

आपके द्वारा पोस्ट किए गए उदाहरण किसी भी तरह स्ट्रिंग के एसीआईआई प्रतिनिधित्व हैं। आपको इसे एक अजगर यूनिकोड स्ट्रिंग में परिवर्तित करने की आवश्यकता है। आम तौर पर आप नौकरी करने के लिए string encoding and decoding का उपयोग कर सकते हैं। यदि आप सुनिश्चित नहीं हैं कि पाइथन कंसोल में इसका सही तरीका कौन सा सही तरीका है।

पाइथन यूनिकोड स्ट्रिंग प्राप्त करने के लिए आज़माएं। यह Django टेम्पलेट्स में सही ढंग से प्रदर्शित होना चाहिए, डीबी आदि में सहेजा जा सकता है .. उदाहरण के तौर पर आप print my_new_string भी कोशिश कर सकते हैं और देखेंगे कि यह जापानी वर्णों को आउटपुट कर रहा है।

+0

इस के साथ कोई भाग्य नहीं है। जब मैं इसे कंसोल में प्रिंट करता हूं तो जापानी वर्णों को प्रदर्शित करने के लिए मैं मूल HTML स्ट्रिंग प्राप्त कर सकता हूं, तो सुंदरसप आउटपुट के साथ मैं सबसे अच्छा कर सकता हूं जैसे "ã €? ã ƒ?ã ‚ ‚ · एक §Receiving§ ƒ ƒ ³No ‘ €
€ € एक ƒ »人 äº & lsaquo; äº & lsaquo; एक और lsaquo; ™ और æ lsaquo; & hellip; “

साढ़े æ € एक और permil; € ž ± भीतर ¨ ƒ 署 ?? करने के लिए है " –

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