2012-03-14 3 views
0

Gmail에서 IMAP을 통해 다운로드 한 GChats를 구문 분석하기 위해 XML을 배우려고합니다. 이렇게하려면 lxml을 사용하고 있습니다. 채팅 메시지의 각 행과 같이 포맷 :XML/HTML로 인코딩 된 GChats를 구문 분석

<cli:message to="[email protected]" iconset="square" from="[email protected]" int:cid="insertid" int:sequence-no="1" int:time-stamp="1236608405935" xmlns:int="google:internal" xmlns:cli="jabber:client"> 

<cli:body>Nikko</cli:body> 

<met:google-mail-signature xmlns:met="google:metadata">0c7ef6e618e9876b</met:google-mail-    signature> 

<x stamp="20090309T14:20:05" xmlns="jabber:x:delay"/> 

<time ms="1236608405975" xmlns="google:timestamp"/> 

</cli:message> 

내가 지금처럼 XML 트리를 구축 할 때 :

root = etree.Element("cli:message") 

내가 얻을이 오류 :

Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
File "lxml.etree.pyx", line 2568, in lxml.etree.Element (src/lxml/lxml.etree.c:52878) 
File "apihelpers.pxi", line 126, in lxml.etree._makeElement (src/lxml/lxml.etree.c:11497) 
File "apihelpers.pxi", line 1542, in lxml.etree._tagValidOrRaise  (src/lxml/lxml.etree.c:23956) 
ValueError: Invalid tag name u'cli:message' 

I을 그것을 이렇게 도주 시키십시오 :

root = etree.Element("cli\:message") 

나는 그는 똑같은 오류. 채팅 보관함의

헤더는 관련 보인다 정보를 제공합니다

Content-Type: text/xml; charset=utf-8 
Content-Transfer-Encoding: 7bit 

사람이 여기에 무슨 일이 일어나고 있는지 알고 있나요?

답변

0

이렇게 응답이 없지만 누군가 궁금해하는 경우를 대비하여 BeautifulSoup는 환상적으로 작업했습니다. 내가해야 할 일은 다음과 같았습니다.

soup = BeautifulSoup(repr(msg_data)) 
print(soup.get_text()) 

그리고 분명히 텍스트를 받았습니다.

+0

기본적으로 내가 채팅 로그를 로컬에 저장 한 경우를 제외하고는 (내가 채팅 로그를 일지 항목으로 잡아두고 싶습니다.) 본질적으로 수행하려고합니다. 최종 스크립트를 볼 기회가 있습니까? – JudeOChop

0

그래서 당신은 잘못된 태그를받은 이유는 당신이 길에서 본다면 LXML는 네임 스페이스 ""CLI를 사용하지 않는 XML을 구문 분석하는 것입니다 그것은 보일 것 대신 같은 :

{url_where_Cli_is_define}Message

당신이 만약 Automatic XSD validation을 참조하십시오. 많은 양의 스키마 관리를 단순화하기 위해 무엇을했는지 알 수 있습니다.

마찬가지로이 문제를 피하기 위해 str.replace()를 사용하여 네임 스페이스를 바꿉니다. "cli : "에서"{url} "로 변경되었습니다. 하나의 사전에 모든 네임 스페이스를 배치하면이 프로세스를 빠르게 수행 할 수 있습니다.

나는 수프가이 과정을 자동으로 처리한다고 상상해 봅니다.