문제

다음 URL로 Google Weather API에서 정보를 검색하려고하면

http://www.google.com/ig/api?weather=munich,germany&hl=de

그런 다음 Minidom으로 구문 분석하려고 시도하면 문서가 잘 형성되지 않았다는 오류가 발생합니다.

다음 코드를 사용합니다

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

응답의 독일 캐릭터가 오류의 원인이라고 생각합니다.

이 작업을 수행하는 올바른 방법은 무엇입니까?

도움이 되었습니까?

해결책

Python의 urllib.urlopen에 따르면 헤더에서 전송 된 인코딩은 ISO-8859-1입니다 (Firefox의 라이브 HTTP 헤더는이 경우 나와 동의하지 않는 것 같습니다. UTF-8 보고서). XML 자체에는 지정된 인코딩이 없습니다.> XML.DOM.MINIDOM은 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'))

편집하다: Glenn Maynard의 의견 후이 답변을 업데이트했습니다. 나는 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'))

Minidom은 ASCII가 아닌 것을 처리하지 않는다고 생각합니다. 대신 LXML을 살펴보고 싶을 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top