Похоже, у вас есть элемент строки, определенный дважды (или у вас отсутствует дополнительный конечный тег), что вызывает одну проблему. Следующим является то, что 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)
Или:
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)
Результаты (2 684 строки):
silvana.toschi@gmail.com
farmacia.manelli@hotmail.com
badobruno@hotmail.com
giovannibrambilla@msn.com
...