[英]OSError: [Errno 36] File name too long:
我需要将网页转换为XML(使用Python 3.4.3
)。 如果我将URL的内容写入文件,那么我可以完美地阅读和解析它,但如果我尝试直接从网页上读取,我的终端中会出现以下错误:
文件“./AnimeXML.py”,第22行,在xml = ElementTree.parse(xmlData)文件“/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/xml/etree/ElementTree.py” ,第1187行,在parse tree.parse(source,parser)文件“/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/xml/etree/ElementTree.py”,第587行,在解析源中= open(source,“rb”)OSError:[Errno 36]文件名太长:
我的python代码:
# AnimeXML.py
#! /usr/bin/Python
# Import xml parser.
import xml.etree.ElementTree as ElementTree
# XML to parse.
sampleUrl = "http://cdn.animenewsnetwork.com/encyclopedia/api.xml?anime=16989"
# Read the xml as a file.
content = urlopen (sampleUrl)
# XML content is stored here to start working on it.
xmlData = content.readall().decode('utf-8')
# Close the file.
content.close()
# Start parsing XML.
xml = ElementTree.parse (xmlData)
# Get root of the XML file.
root = xml.getroot()
for info in root.iter("info"):
print (info.attrib)
有什么方法可以修复我的代码,以便我可以直接将网页读入python而不会出现此错误吗?
正如ElementTree
docs的Parsing XML部分所述:
我们可以通过读取文件来导入这些数据:
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
或直接从字符串:
root = ET.fromstring(country_data_as_string)
您将整个XML内容作为巨型路径名传递。 您的XML文件可能大于2K,或者您的平台的最大路径名大小,因此错误。 如果不是,那么你只会得到一个不同的错误,即没有名为[everything up to the first / in your XML file]
。
只需使用fromstring
而不是parse
。
或者,请注意, parse
可以采用文件对象,而不仅仅是文件名。 urlopen
返回的东西是一个文件对象。
另请注意该部分的下一行:
fromstring()
将字符串中的XML直接解析为Element
,这是解析树的根元素。 其他解析函数可以创建ElementTree
。
所以,你不希望root = tree.getroot()
。
所以:
# ...
content.close()
root = ElementTree.fromstring(xmlData)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.