Amazon レスポンスからテキストを取得する必要があります。私が抱えている問題は、属性への正しいパスを見つけること、または少なくともlxmlにそれらを見つける方法を伝えることだと思います。理想的には、各項目に必要な属性のリストまたは辞書が必要です。stackoverflow でスレッドを見つけましたlxml を使用して XML ドキュメントの特定の部分を取得する方法は? 「NameError:name 'item'が定義されていません」というメッセージが表示され、仕事に取りかかれません。「item = {}」をループの外に移動しようとしましたが、その結果、辞書は空になり、None になりました。また、印刷すると、「Element { http://webservices.amazon.com/AWSECommerceService/2011-08-01 }ItemSearchResponse at 0x1032a30」が表示されますが、ElementTree オブジェクトではありません。それが問題の一部であるかどうかは不明です。
それで、私の質問は、どうすればこれを機能させることができますか?また、その場合、返されるすべての製品に必要な属性を取得するために、「アイテム」内のすべての「アイテム」をループするにはどうすればよいですか? (または、リストの辞書が最善の解決策になるかもしれません)。https://www.box.com/s/qt2kr0h4nrig68u9w07jを見ているサンプルの xml 応答へのリンクを次に示します。役立つ場合は、応答全体へのリンクを提供できます。以下は、エラーが発生している 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)