如何使用python xml.etree.ElementTree解析易趣API响应?
我正在尝试使用xml.etree.ElementTree解析来自eBay查找API findItemsByProduct的响应。经过长时间的尝试和错误,我提出了以下代码,用于打印一些数据:如何使用python xml.etree.ElementTree解析易趣API响应?,python,xml,xmlhttprequest,ebay-api,Python,Xml,Xmlhttprequest,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.co
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包装器来实现这一点吗?
我看到了,但我没能让他们中的任何一个做我想做的事。是否有值得使用的易趣python API?您可以使用
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检索子元素下一级以上的元素。另见