2

私は次から返されたデータを取得しようとしています:

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

迅速かつ簡単な方法で口述に。これを行う最善の方法は何ですか?

ありがとう。

4

3 に答える 3

8

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))
于 2010-04-04T20:29:56.510 に答える
2

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
于 2010-04-04T20:52:07.137 に答える
0

xml.etreepython2.5以降の標準ライブラリから。lxmlどちらが同じインターフェースを持っているかも見てください。私はあまり「飛び込んだ」わけではありませんが、これは python >= 2.5 にも当てはまると思います

編集:

これは xml を解析するための高速で非常に簡単な方法です。実際にはデータを dict に入れる必要はありませんが、API は非常に直感的です。

于 2010-04-04T20:02:49.713 に答える