Python 尝试使用PY3从xml提取数据时出现xml.etree.ElementTree.ParseError问题

Python 尝试使用PY3从xml提取数据时出现xml.etree.ElementTree.ParseError问题,python,xml,elementtree,Python,Xml,Elementtree,我在尝试使用Python3从xml文件提取电子邮件时遇到问题 我的代码是: 将xml.etree.ElementTree作为ET导入 导入ssl #忽略SSL证书错误 ctx=ssl.create\u default\u context() ctx.check_hostname=False ctx.verify_mode=ssl.CERT_NONE 数据=“” MI1604 瓦雷西纳农场 瓦雷西纳大道,121号 米兰 3480813398 席尔瓦娜。toschi@gmail.com 乌尔巴纳 符

我在尝试使用Python3从xml文件提取电子邮件时遇到问题

我的代码是:

将xml.etree.ElementTree作为ET导入
导入ssl
#忽略SSL证书错误
ctx=ssl.create\u default\u context()
ctx.check_hostname=False
ctx.verify_mode=ssl.CERT_NONE
数据=“”
MI1604
瓦雷西纳农场
瓦雷西纳大道,121号
米兰
3480813398
席尔瓦娜。toschi@gmail.com
乌尔巴纳
符合事实的
'''
tree=ET.fromstring(数据)#标准ET
results=tree.findall('email')#在xml中查找count部分
打印(结果.文本)
我得到的错误是

Traceback (most recent call last):
  File "farmacie.py", line 25, in <module>
    tree = ET.fromstring(data) #standard ET
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/xml/etree/ElementTree.py", line 1321, in XML
    return parser.close()
xml.etree.ElementTree.ParseError: no element found: line 12, column 6
回溯(最近一次呼叫最后一次):
文件“farmacie.py”,第25行,在
tree=ET.fromstring(数据)#标准ET
xml格式的文件“/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/xml/etree/ElementTree.py”,第1321行
返回parser.close()
xml.etree.ElementTree.ParseError:未找到元素:第12行第6列

如何解决此问题?

因此,似乎定义了两次行元素(或者缺少额外的结束标记),这导致了一个问题。下一个是
findall()
将返回一个列表,因此您需要选择一个列表,或者将它们全部打印出来:

import xml.etree.ElementTree as ET

data = '''<row _id="row-jyi7-56ru_b7km" _uuid="00000000-0000-0000-B614-7FFDD7C1595B" _position="0" _address="https://www.dati.lombardia.it/resource/zzzz-zzzz/row-jyi7-56ru_b7km">
        <codice_regionale>MI1604</codice_regionale>
        <denom_farmacia>Farmacia Varesina</denom_farmacia>
        <indirizzo>VIA VARESINA, 121</indirizzo>
        <localita>Milano</localita>
        <telefono>3480813398</telefono>
        <email>silvana.toschi@gmail.com</email>
        <caratterizzazione>urbana</caratterizzazione>
        <esenzioni>true</esenzioni>
        <location latitude="45.500881" longitude="9.141339"/>
</row>'''

tree = ET.fromstring(data) #standard ET
results = tree.findall('email') #find the count section in xml

print(results[0].text)
更新

获取完整信息后,获取所有电子邮件的正确方法是:

import xml.etree.ElementTree as ET
import requests

data = requests.get('https://www.dati.lombardia.it/api/views/5dq5-xs9z/rows.xml').content

tree = ET.fromstring(data)
results = tree.findall("./row/row/email")

for r in results:
    print(r.text)
结果(2684行):


你错过了一个收场,或者一开始就不应该有额外的收场。谢谢,现在可以了。但是,当我尝试将该过程扩展到更大的xml()时,它仍然不起作用。有什么建议吗?从您链接的数据集中,您可能正在查找
tree.findall(“./row/row/email”)
。这将从整个集合中提取所有电子邮件元素。非常感谢。但是,我仍然存在问题,如果我尝试插入整个数据集,我仍然会遇到问题(xml.etree.ElementTree.ParseError:格式不正确(无效标记):第401行,第60列)。我应该如何解决这个问题?我应该通过链接导入数据还是复制粘贴到数据变量中?再次感谢你的帮助!!!
for r in results:
    print(r.text)
import xml.etree.ElementTree as ET
import requests

data = requests.get('https://www.dati.lombardia.it/api/views/5dq5-xs9z/rows.xml').content

tree = ET.fromstring(data)
results = tree.findall("./row/row/email")

for r in results:
    print(r.text)
silvana.toschi@gmail.com
farmacia.manelli@hotmail.com
badobruno@hotmail.com
giovannibrambilla@msn.com
...