2013-12-07 33 views
2

我正在使用python版本2.7。*,我需要獲取youtube播放列表。我不喜歡這樣寫道:如何解析python中的大型XML文件?

import urllib 
from xml.dom import minidom 

playlist_xml = str(urllib.urlopen('https://gdata.youtube.com/feeds/api/playlists/PLKwibIpsTqDyV6NgiJmO-x0yKfqWjApwp?v=2').read()) 
playlist = minidom.parse(playlist_xml) 

的問題是,我無法分析結果...

Traceback (most recent call last): 
    File "/Users/Python/parser.py", line 11, in <module> 
    playlist = minidom.parse(playlist_xml) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/xml/dom/minidom.py", line 1914, in parse 
    return expatbuilder.parse(file) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/xml/dom/expatbuilder.py", line 922, in parse 
    fp = open(file, 'rb') 
IOError: [Errno 63] File name too long: 
+0

有很多方法可以將不可管理的長XML文檔解析爲python中的流,但這不是一個特別大的文檔。解析調用失敗的原因是什麼?你在期待什麼? –

+1

「我無法解析結果」不是對問題的描述性描述。你看過你想分析的XML嗎?它會引發錯誤嗎?如果是這樣,那是什麼?我非常懷疑這與XML的大小有關。 YouTube的API只允許一次返回50個結果(我認爲),所以xml不應該那麼大。 – mgilson

+0

相關的問題的標題:[Python的運行內存解析使用XML cElementTree.iterparse](http://stackoverflow.com/q/7697710/4279) – jfs

回答

2

,您應該使用minidom命名的parseString方法,而不是parse。雖然parseString解析XML,並接受一個字符串,parse接受filename_or_file和失敗處理XML內容作爲文件名。

playlist = minidom.parseString(playlist_xml)