Python解析Wolfram API的Xml
我正在尝试使用一个Python的XML解析脚本来获取Wolfram API的输出。下面是我的脚本:
import urllib
import urllib.request
import xml.etree.ElementTree as ET
xml_data=urllib.request.urlopen("http://api.wolframalpha.com/v2/query?input=sqrt+2&appid=APLTT9-9WG78GYE65").read()
root = ET.fromstring(xml_data)
for child in root:
print (child.get("title"))
print (child.attrib)
我知道这个脚本目前只获取了代码标题部分的属性,但这算是一个开始。
这是输出的一部分:
<pod title="Input" scanner="Identity" id="Input" position="100" error="false" numsubpods="1">
<subpod title="">
<plaintext>sqrt(2)</plaintext>
我想让它只打印出标签中的内容。有没有人知道怎么修改代码才能实现这个?
2 个回答
0
这里有一些更多的例子:
import httplib2
import xml.etree.ElementTree as ET
def request(query):
query = urllib.urlencode({'input':query})
app_id = "Q6254U-URKKHH9JLL"
wolfram_api = "http://api.wolframalpha.com/v2/query?appid="+app_id+"&format=plaintext&podtitle=Result&"+query
resp, content = httplib2.Http().request(wolfram_api)
return content
def response(query):
content = request(query)
root = ET.fromstring(content)
error = root.get('error')
success = root.get('success')
numpods = root.get('numpods')
answer= ''
if success and int(numpods) > 0 :
for plaintext in root.iter('plaintext'):
if isinstance(plaintext.text, str) :
answer = answer + plaintext.text
return answer
elif error:
return "sorry I don't know that"
request("How old is the queen")
2
只有 <plaintext>
元素里面包含文本:
for pt in root.findall('.//plaintext'):
if pt.text:
print(pt.text)
这个 .text
属性用来保存一个元素的文本内容。
对于你的网址,这样会输出:
sqrt(2)
1.4142135623730950488016887242096980785696718753769480...
[1; 2^_]
Pythagoras's constant
sqrt(2)~~1.4142 (real, principal root)
-sqrt(2)~~-1.4142 (real root)
看起来 <pod>
标签也有有趣的标题:
for pod in root.findall('.//pod'):
print(pod.attrib['title'])
for pt in pod.findall('.//plaintext'):
if pt.text:
print('-', pt.text)
然后会输出:
Input
- sqrt(2)
Decimal approximation
- 1.4142135623730950488016887242096980785696718753769480...
Number line
Continued fraction
- [1; 2^_]
Constant name
- Pythagoras's constant
All 2nd roots of 2
- sqrt(2)~~1.4142 (real, principal root)
- -sqrt(2)~~-1.4142 (real root)
Plot of all roots in the complex plane