Какой простой и быстрый способ поместить возвращенные данные XML в диктовку? - PullRequest
2 голосов
/ 04 апреля 2010

Я пытаюсь получить данные, возвращенные из:

http://ipinfodb.com/ip_query.php?ip=74.125.45.100&timezone=true

В бой быстро и легко. Какой лучший способ сделать это?

Спасибо.

Ответы [ 3 ]

8 голосов
/ 05 апреля 2010

Использование xml из стандартной библиотеки Python:

import xml.etree.ElementTree as xee
contents='''\
<?xml version="1.0" encoding="UTF-8"?>
<Response>
  <Ip>74.125.45.100</Ip>
  <Status>OK</Status>
  <CountryCode>US</CountryCode>
  <CountryName>United States</CountryName>
  <RegionCode>06</RegionCode>
  <RegionName>California</RegionName>
  <City>Mountain View</City>
  <ZipPostalCode>94043</ZipPostalCode>
  <Latitude>37.4192</Latitude>
  <Longitude>-122.057</Longitude>
  <TimezoneName>America/Los_Angeles</TimezoneName>
  <Gmtoffset>-25200</Gmtoffset>
  <Isdst>1</Isdst>
</Response>'''

doc=xee.fromstring(contents)
print dict(((elt.tag,elt.text) for elt in doc))

Или используя lxml:

import lxml.etree
import urllib2
url='http://ipinfodb.com/ip_query.php?ip=74.125.45.100&timezone=true'
doc = lxml.etree.parse( urllib2.urlopen(url) ).getroot()
print dict(((elt.tag,elt.text) for elt in doc))
2 голосов
/ 05 апреля 2010

Я бы использовал встроенный xml.dom, примерно так:

import urllib
from xml.dom import minidom

data = urllib.urlopen('http://ipinfodb.com/ip_query.php?ip=74.125.45.100&timezone=true')
xml_data = minidom.parse(data)
my_dict ={}
for node in xml_data.getElementsByTagName('Response')[0].childNodes:
    if node.nodeType != minidom.Node.TEXT_NODE:
        my_dict[node.nodeName] = node.childNodes[0].data
0 голосов
/ 05 апреля 2010

xml.etree из стандартной библиотеки, начиная с python2.5. посмотрите также на lxml, который имеет тот же интерфейс. Я не "нырнул" во многих, но я думаю, что это также применимо к python> = 2.5 тоже .

Edit:

Это быстрый и действительно простой способ синтаксического анализа xml, на самом деле данные не нужно указывать, но API довольно интуитивно понятен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...