我正在尝试从服务器获取 XML 文件(使用 Python 3.2.3),但我不断收到“没有这样的文件或目录”的错误消息。我确定 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'
您可以复制并粘贴这些 URL,并查看这些位置中是否存在文件。我什至将文件和目录复制到本地主机,并尝试将其作为本地主机,以防外部服务器出现某种阻塞。它给了我同样的错误,所以这不是问题。我想知道Etree 的 parse()是否无法处理 HTTP,但文档没有说明这一点,所以我猜这也不是问题。
更新:正如评论中所建议的,我使用 using open()
,但它仍然返回错误。导入和尝试urllib.request.urlopen(url)返回错误AttributeError: 'module' object has no attribute 'request'。