我正在尝试从服务器(使用Python 3.2.3 )获取XML文件,但我一直收到这样的错误,即“没有这样的文件或目录”。我确定URL是正确的,因为它在错误消息中输出URL,我可以复制粘贴它并在浏览器中加载它。所以我很困惑这是怎么回事。这是我的代码:
import xml.etree.ElementTree as etree
class Blah(object):
def getXML(self,xmlurl):
tree = etree.parse(xmlurl)
return tree.getroot()
def pregameData(self,url):
try:
x = self.getXML('{0}linescore.xml'.format(url))
except IOError as err:
x = "I/O error: {0}".format(err)
return x
if __name__ == '__main__':
x = Blah()
l = ['http://gd2.mlb.com/components/game/mlb/year_2013/month_04/day_15/gid_2013_04_15_anamlb_minmlb_1/',
'http://gd2.mlb.com/components/game/mlb/year_2013/month_04/day_15/gid_2013_04_15_phimlb_cinmlb_1/',
'http://gd2.mlb.com/components/game/mlb/year_2013/month_04/day_15/gid_2013_04_15_slnmlb_pitmlb_1/'
]
for url in l:
pre = x.pregameData(url)
print(pre)
它总是会返回此错误:
I/O error: [Errno 2] No such file or directory: 'http://gd2.mlb.com/components/game/mlb/year_2013/month_04/day_15/gid_2013_04_15_anamlb_minmlb_1/linescore.xml'
I/O error: [Errno 2] No such file or directory: 'http://gd2.mlb.com/components/game/mlb/year_2013/month_04/day_15/gid_2013_04_15_phimlb_cinmlb_1/linescore.xml'
I/O error: [Errno 2] No such file or directory: 'http://gd2.mlb.com/components/game/mlb/year_2013/month_04/day_15/gid_2013_04_15_slnmlb_pitmlb_1/linescore.xml'
您可以复制粘贴这些网址,并查看这些位置确实存在的文件。我甚至复制了文件&目录到localhost,并尝试将此作为localhost,以防外部服务器有某种块。它给了我同样的错误,所以这不是问题。我想知道Etree's parse()是否无法处理HTTP,但是文档没有说明这一点,所以我猜这也不是问题。
更新:根据评论中的建议,我使用open()
,但仍然返回错误。进口&尝试urllib.request.urlopen(url)会返回错误 AttributeError:'module'对象没有属性'request'。
答案 0 :(得分:0)
你是对的,xml.etree
不会自动下载和解析网址,如果你想这样做,你需要先自己下载(使用urllib或者请求......)。
文档明确指出parse
采用文件名或文件对象,如果它支持网址我肯定会明确说出来。例如,lxml.etree.parse()
。