2013-03-15 3 views
0

Я пытаюсь получить out of the wolfram api с помощью скрипта синтаксического анализа python xml. Вот мой сценарий:Python Xml Parsing for 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> 

Я пытаюсь получить его только распечатать, что в тегах. Кто-нибудь знает, как отредактировать код, чтобы получить это?

+0

Итак, вы хотите напечатать 'sqrt (2)? –

ответ

2

Только <plaintext> элементы содержат текст:

for pt in root.findall('.//plaintext'): 
    if pt.text: 
     print(pt.text) 

Атрибут .text содержит текст элемента.

Для вашего URL, который печатает:

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 
+0

Это именно то, что я хотел. Спасибо! – user1985351

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")