需要从亚马逊回复中获取文本。我认为我遇到的麻烦是找到属性的正确路径,或者至少告诉 lxml 如何找到它们。理想情况下,我想要每个项目所需属性的列表或字典。我在 stackoverflow 上找到了一个线程如何使用 lxml 来获取 XML 文档的特定部分?我没有开始工作,得到“NameError:name 'item' is not defined”。我尝试将“item = {}”移出循环,结果为空字典和无。此外,当我打印 t 时,我得到“Element { http://webservices.amazon.com/AWSECommerceService/2011-08-01 }ItemSearchResponse at 0x1032a30”,而不是 ElementTree 对象,不确定这是问题的一部分。
所以我的问题是,我如何让这个工作,当我这样做时,我如何遍历“项目”中的所有“项目”,以便我获得所有返回产品的所需属性?(或者列表字典可能是最好的解决方案)。这是我正在查看的示例 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)