2011-06-21 32 views
0

我一直在試圖檢索通過HTTP查詢的信息,作爲一個例子xml.parsers.expat.ExpatError在解析XML

http://www.opencellid.org/cell/get?key=xxxxxxxxxxxxx&mnc=1&mcc=228&lac=101&cellid=7283

返回我的XML格式的響應,像

<rsp stat="ok"> 
<cell nbSamples="1" mnc="1" lac="101" lat="46.52079" lon="6.56676" cellId="7283" mcc="228" range="6000"/> 
</rsp> 

我試過使用responseurllib模塊打開URL,然後使用elementtree.ElementTree解析。

代碼片段:

url = 'http://www.opencellid.org/cell/get?key=xxxxxxxxxx&mnc=1&mcc=228&lac=101&cellid=7283 ' 
rss = parse(requests.get(url = url)).getroot() 
pprint(rss) 

然而,我得到以下錯誤:

xml.parsers.expat.ExpatError: junk after document element: line 5, column 0 

即將打印的反應產生的HTML成功代碼。請幫助一些!

+0

請求模塊(object?)從哪裏來?你能擴展代碼片段來指定你正在導入的模塊嗎? –

+0

進口請求, from pprint import pprint, from elementtree.ElementTree import parse – Arun

回答

1

您忘記了在響應對象上調用內容。這就是你如何得到實際的XML。

content = requests.get(url = url).content 
rss = parse(content).getroot() 
+0

謝謝。 現在我至少可以打印內容,但解析器有其他問題: 但我想我可以儘快處理。 文件「/usr/local/lib/python2.6/dist-packages/elementtree/ElementTree.py」,行859,解析爲 tree.parse(source,parser) 文件「/ usr/local/lib/python2.6/dist-packages/elementtree/ElementTree.py「,第576行解析 source = open(source,」rb「) IOError:[Errno 2]沒有這樣的文件或目錄: – Arun

+0

看起來像parse是期待一個文件而不是一個字符串。你應該尋找一個不同的方法或者做一些類似的事情:import StringIO; rss = parse(StringIO.StringIO(content))。getroot() –

+0

非常感謝!完美使用[BeautifulSoup](http://www.crummy.com/software/BeautifulSoup/)而不是元素樹 – Arun

0

我建議第一件事是保存爲文本文件只與XML的內容:

<rsp stat="ok"> 
    <cell nbSamples="1" mnc="1" lac="101" lat="46.52079" lon="6.56676" cellId="7283" mcc="228" range="6000"/> 
</rsp> 

只要確保沒有尾隨字符結尾。然後檢查它的解析工作。 如果是這樣,那麼你知道它是一個溝通問題,然後必須弄清楚如何「清理」你正在接收的內容。

祝你好運!

+0

我該怎麼做?這_「pprint(requests.get(url = url))」_打印HTML響應代碼。 – Arun