2015-07-29 2 views
-2

В настоящее время я пытаюсь извлечь информацию из API Openweather для моего проекта python. Я просто хочу, чтобы погода и местоположение были извлечены из файла xml, я не знаю, как получить именно эту информацию. Я использовал выражения if внутри цикла for для удаления символов в тексте, который я не хочу сохранять, но как это сделать для всей отображаемой информации? есть способ просто извлечь строки, которые я хочу из api? код я использую:Как извлечь информацию из api в python

import requests 

print "enter a city" 
city = raw_input() 
print "enter a country" 
country = raw_input() 

fh = open('/home/Ricky92d4/weather.txt', 'w') 

info = requests.get('http://api.openweathermap.org/data/2.5/weather?q='+city +','+ country +'&mode=xml') 
fh.write(info.text) 
fh.close() 

fl = open('/home/Ricky92d4/weather.txt') 
new_city = fl.read() 

fl.close() 

for line in new_city: 
    if line.startswith ('<'): 
     new_city = new_city.replace('<', '') 

    if line.endswith ('>'): 
     new_city = new_city.replace('>', '') 

    if (line.startswith('?')): 
     new_city = new_city.replace('?xml version="1.0" encoding="utf-8"?', '') 

    if (line.endswith('/')): 
     new_city = new_city.replace('/', '\n') 

print new_city 
+1

Правильное решение - использовать синтаксический анализатор XML. Начальная кривая обучения вернет вам несколько часов, но вы сможете быстро восстановить это, получив навык использования простого, надежного универсального инструмента, который вам понадобится много раз в будущем. – tripleee

+0

Сохранение информации в файл кажется излишним и создаст узкое место ввода-вывода. Просто сохраните структуру XML в памяти ... как только вы разобрались, как ее разобрать. – tripleee

+1

Потому что он не может быть скопирован достаточно: не пытайтесь разобрать xml с регулярным выражением. Просто голова. Взгляните на [Elementree] (https://docs.python.org/2/library/xml.etree.elementtree.html) или [lxml] (http://lxml.de/) – vds

ответ

0

Просто, чтобы вы начали:

>>> from lxml import etree 
>>> city='Boston' 
>>> country='USA' 
>>> info = requests.get('http://api.openweathermap.org/data/2.5/weather?q='+city +','+ country +'&mode=xml') 
>>> doc = etree.fromstring(info.text) 
>>> doc.find('city').find('coord').get('lon') 
'-71.06' 
>>> doc.xpath('/current/city/coord/@lon')[0] 
'-71.06' 

Но оказалось, что есть и JSON API, который, возможно, сделает вашу жизнь намного проще:

>>> info = requests.get('http://api.openweathermap.org/data/2.5/weather?q='+city +','+ country +'&mode=json') 
>>> info.json()['coord']['lon'] 
-71.06 

Это намного проще, потому что ответ JSON может быть проанализирован непосредственно в структурах данных Python.

Смежные вопросы