سؤال

عند محاولة استرداد معلومات من جوجل API الطقس مع العنوان التالي ،

http://www.google.com/ig/api?weather=Munich ألمانيا&hl=دي

ثم محاولة تحليل مع مينيدوم لي خطأ أن الوثيقة لم تتشكل بشكل جيد.

استخدام التعليمات البرمجية التالية

sock = urllib.urlopen(url) # above mentioned url
doc = minidom.parse(sock)

أعتقد الألمانية الشخصيات في الرد هو سبب الخطأ.

ما هي الطريقة الصحيحة للقيام بذلك ؟

هل كانت مفيدة؟

المحلول

ترميز أرسلت في رؤوس iso-8859-1 وفقا بايثون urllib.urlopen (على الرغم من أن فايرفوكس يعيش رؤوس http يبدو أن نختلف مع لي في هذه الحالة - تقارير utf-8).في xml نفسها لا يوجد ترميز محدد --> هذا هو السبب في xml.دوم.مينيدوم يفترض انها utf-8.

لذا التالية يجب إصلاح هذه المشكلة محددة:

import urllib
from xml.dom import minidom

sock = urllib.urlopen('http://www.google.com/ig/api?weather=Munich,Germany&hl=de')
s = sock.read()
encoding = sock.headers['Content-type'].split('charset=')[1] # iso-8859-1
doc = minidom.parseString(s.decode(encoding).encode('utf-8'))

تحرير:لقد تم تحديث هذا الجواب بعد تعليق جلين ماينارد.أخذت الحرية في اتخاذ خط واحد من الجواب من اللاعب lennert Regebro.

نصائح أخرى

يبدو أن هذا العمل:

sock = urllib.urlopen(url)
# There is a nicer way for this, but I don't remember right now:
encoding = sock.headers['Content-type'].split('charset=')[1]
data = sock.read()
dom = minidom.parseString(data.decode(encoding).encode('ascii', 'xmlcharrefreplace'))

أعتقد مينيدوم لا تحمل أي شيء غير ascii.قد ترغب في النظر في lxml بدلا من ذلك, فإنه لا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top