如何使用python xml.etree.ElementTree来解析eBay API响应?

时间:2010-11-05 21:57:40

标签: python xml xmlhttprequest ebay ebay-api

我正在尝试使用xml.etree.ElementTree来解析来自eBay查找API的响应,findItemsByProduct。经过漫长的试验和错误,我想出了这个打印一些数据的代码:

import urllib
from xml.etree import ElementTree as ET

appID = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
isbn = '3868731342'

namespace = '{http://www.ebay.com/marketplace/search/v1/services}'

url = 'http://svcs.ebay.com/services/search/FindingService/v1?' \
    + 'OPERATION-NAME=findItemsByProduct' \
    + '&SERVICE-VERSION=1.0.0' \
    + '&GLOBAL-ID=EBAY-DE' \
    + '&SECURITY-APPNAME=' + appID \
    + '&RESPONSE-DATA-FORMAT=XML' \
    + '&REST-PAYLOAD' \
    + '&productId.@type=ISBN&productId=' + isbn

root = ET.parse(urllib.urlopen(url)).getroot()

for parts in root:
    if parts.tag == (namespace + 'searchResult'):
        for item in list(parts):
            for a in list(item):
                if a.tag == (namespace + 'itemId'):
                    print 'itemId: ' + a.text
                if a.tag == (namespace + 'title'):
                    print 'title: ' + a.text

但这似乎不是很优雅,如何在不循环所有属性的情况下获取'itemId'和'title'并检查它是否是我想要的?我尝试使用.get(namespace + 'itemId').find(namespace + 'itemId')以及.attrib.get(namespace + 'itemId')之类的内容,但没有任何效果。

有人可能会告诉我如何使用这个API的一些python包装器吗? 我看到easyBayebay-sdk-pythonpyeBay,但我没有让他们中的任何一个做我想做的事。有没有值得使用的eBay python API?

1 个答案:

答案 0 :(得分:4)

您可以使用ElementTree。如果你想获得项目,你可以使用findall和项目的路径,然后迭代项目列表:

items = root.findall(namespace+'searchResult/'+namespace+'item')
for item in items: 
     item.find(namespace+'itemId').text
     item.find(namespace+'title').text

直接从根目录获取第一个itemId:

root.find(namespace+'searchResult/'+namespace+'item/'+namespace+'itemId')

基本上,find方法使用XPath来检索子元素下面多个级别的元素。另请参阅Effbot's explanation of XPath support in ElementTree