#python #openstreetmap #elementtree
Вопрос:
Я пытаюсь извлечь информацию с помощью ElementTree. Мне удалось получить данные по многим атрибутам, но обработка останавливается, возможно, из-за недостатка информации. Он отображает это сообщение об ошибке :
xml.etree.ElementTree.ParseError: no element found: line 1, column 0
Вот код, который я использую :
import xml.etree.ElementTree
MyosmID = str(id_cinema)
r = requests.get("https://www.openstreetmap.org/api/0.6/node/" MyosmID)
root = xml.etree.ElementTree.fromstring(r.content)
for child in root.iter('tag'):
if child.attrib['k'] == 'website':
website = child.attrib['v']
if child.attrib['k'] == 'wikidata':
wikidata = child.attrib['v']
Как я могу решить эту проблему с ошибкой?
Комментарии:
1. Добавьте следующие строки перед вызовом
fromstring
:print(r.status_code) print(r.content)
; или, в качестве альтернативы, простоr.raise_for_status()
если вы хотите вызвать ошибку при неверном ответе.2. Я подозреваю, что вы получаете ответ 404 «Не найдено», как и я, когда тестирую с помощью
MyosmID = '12345'
3. когда я тестирую с помощью MyosmID = ‘630982183’ атрибута, который потенциально блокирует обработку, я получаю то же самое сообщение об ошибке выше (в моем вопросе)
4. Я получаю другую ошибку с этим вводом.
requests.exceptions.HTTPError: 410 Client Error: Gone for url: https://www.openstreetmap.org/api/0.6/node/630982183
5. когда я это делаю, я тоже получаю ошибку 410: Запросы.исключения. HTTPError: Ошибка клиента 410: Пропал URL: openstreetmap.org/api/0.6/node/630982183
Ответ №1:
Я добавил это в свой код, и проблема решена :
MyosmID = str(id_cinema)
try :
r = requests.get("https://www.openstreetmap.org/api/0.6/node/" MyosmID)
r.raise_for_status()
root = xml.etree.ElementTree.fromstring(r.content)
fromstring: print(r.status_code)
for child in root.iter('tag'):
if child.attrib['k'] == 'website':
website = child.attrib['v']
if child.attrib['k'] == 'wikidata':
wikidata = child.attrib['v']
except Exception:
pass
Спасибо вам за вашу помощь 🙂