需要从亚马逊回应中获取文字。我认为我遇到的麻烦是找到属性的正确路径,或者至少告诉lxml如何找到它们。理想情况下,我想要每个项目的所需属性的列表或字典。我在stackoverflow How to use lxml to grab specific parts of an XML document?上发现了一个我没有开始工作的线程,得到“NameError:name'item'未定义”。我尝试将“item = {}”移出循环,得到一个空字典和None。 此外,当我打印时,我得到“元素{http://webservices.amazon.com/AWSECommerceService/2011-08-01} ItemSearchResponse在0x1032a30”,而不是ElementTree对象,不确定是否是问题的一部分。
所以我的问题是,如何让这个工作,当我这样做时,我如何遍历'items'中的所有'item',以便我获得所有返回的产品所需的属性? (或者列表是最好的解决方案)。这是我正在查看的示例xml响应的链接https://www.box.com/s/qt2kr0h4nrig68u9w07j,如果有帮助,我可以提供指向整个响应的链接。下面是获取错误的python代码,实际上只是上面提到的线程的副本。由于使用了模块,我“限制”使用lxml进行解析。
更新:链接到原始(和不间断)xml。 https://www.box.com/s/2yb1ge6rxvmzshw4pj3f
import bottlenose
from lxml import etree
import lxml.etree as ET
from pprint import pprint as pp
t = ET.fromstring(response)
AMAZON_NS = "{http://webservices.amazon.com/AWSECommerceService/2011-08-01}"
TAGPOS = len(AMAZON_NS) # Find all ItemAttributes elements.
for ia in t.iter(AMAZON_NS+'ItemAttributes'):
item = {}
# Iterate over all the children of the ItemAttributes node
for elem in ia:
# remove namespace stuff from key, remove extraneous whitepace from value
item[elem.tag[TAGPOS:]] = elem.text.strip()
print pp(item)