python3中读取/解析XML url的最佳方法

python3中读取/解析XML url的最佳方法,python,json,xml,parsing,Python,Json,Xml,Parsing,我读了很多类似问题的不同答案,但似乎没有人能提供一个简单的解决方案 假设有这样一个远程url,最终目标是获得一个可用的python对象(例如字典或类似json的对象) 如果xml另存为本地文件,我确实找到了不同的方法: import xml.etree.ElementTree as ET file = '/home/user/query.xml' tree = ET.parse(file) root = tree.getroot() for c in root: print(c.ta

我读了很多类似问题的不同答案,但似乎没有人能提供一个简单的解决方案

假设有这样一个远程url,最终目标是获得一个可用的python对象(例如字典或类似json的对象)

如果xml另存为本地文件,我确实找到了不同的方法:

import xml.etree.ElementTree as ET

file = '/home/user/query.xml'
tree = ET.parse(file)
root = tree.getroot()

for c in root:
    print(c.tag)
    for i in c:
        print(i.tag)

我没有找到一种方法(使用本机python模块)来碰撞url字符串并获取对象

好的,我认为最好的解决方案是:

import xml.etree.ElementTree as ET
import urllib.request

opener = urllib.request.build_opener()
url = 'https://www.emidius.eu/fdsnws/event/1/query?eventid=quakeml:eu.ahead/event/13270512_0000_000&includeallorigins=true&includeallmagnitudes=true&format=xml'

tree = ET.parse(opener.open(url))

这是可行的,但您不需要
build\u opener()
。 您可以为某些特定的案例或协议构建自定义的开场白,但您使用的是普通的https。所以你可以用

import urllib.request
import xml.etree.ElementTree as ET

url = 'https://www.emidius.eu/fdsnws/event/1/query?eventid=quakeml:eu.ahead/event/13270512_0000_000&includeallorigins=true&includeallmagnitudes=true&format=xml'

with urllib.request.urlopen(url) as response:
   html = ET.fromstring(response.read().decode())

下载然后解析有什么不对?@Joe因为对于我所面临的工作流,我需要直接使用URL,实际上我遇到了一个错误:
文件名太长,并且没有创建
html
。您需要从
response
Ah中删除
read()
,好的。您需要从字符串解析,而不是从
open
解析。固定的。还必须对字节进行解码。