2014-01-27 4 views
0

Я пытаюсь получить содержание text отзывов об этом продукте в amazon с помощью api. Но я не могу это решить. Вот что у меня есть:Как извлечь отзывы от iframeurl, возвращенные amazon api в python?

result = api.item_lookup('B00062B6QY', ResponseGroup='Reviews', 
    TruncateReviewsAt=256, IncludeReviewsSummary=False) 
iframeurl=result.xpath('//*[local-name()="IFrameURL"]/text()')[0].strip() 
print iframeurl 
reviews=requests.get(iframeurl) 
reviews.raise_for_status() 
#data = json.loads(reviews.text) 
root = ET.fromstring(reviews.text) 
print root 

Выход:

http://www.amazon.com/reviews/iframe?akid=helloworld&alinkCode=xm2&asin=B00062B6QY&atag=welcomehome-20&exp=2014-01-28T19%3A06%3A20Z&summary=0&truncate=256&v=2&sig=HIDDEN%3D 
Traceback (most recent call last): 
    File "amazon_api_new.py", line 36, in <module> 
    root = ET.fromstring(reviews.text) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/xml/etree/ElementTree.py", line 1300, in XML 
    parser.feed(text) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/xml/etree/ElementTree.py", line 1642, in feed 
    self._raiseerror(v) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/xml/etree/ElementTree.py", line 1506, in _raiseerror 
    raise err 
xml.etree.ElementTree.ParseError: mismatched tag: line 867, column 2 

PS: Я изменил iframeurl распечатывается только, чтобы очистить api key сведения

EDIT: изображение enter image description here из firebug

+0

лучше напечатать и добавить 'reviews.text' на вопрос –

+0

@Guy: я редактировал выше –

+0

, что' печать reviews.text 'дайте? –

ответ

1

вместо использования ElementTree, попробуйте загрузить reviews.text. lxml как:

>>> from lxml import etree 
>>> parser = etree.HTMLParser() 
>>> tree = etree.parse(StringIO(reviews.text), parser) 

>>> result = etree.tostring(tree.getroot(), 
...       pretty_print=True, method="html") 
>>> print(result) 
... 

конечно, вы можете использовать lxml xpath для дальнейшего разбора

+0

в моем случае: я бы использовал broken_html = "out.html" сверху, правильно? –

+0

нет необходимости создавать файл, просто загрузите html в парсер, см. Мое обновление –

+0

Что мне следует импортировать для 'StringIO' –

Смежные вопросы