55634


YAHOOショッピングの商品レビュー検索のWebAPIを使ってレビューの本文を抽出したいです。  
XMLファイルを読み取るところまでは多分できていますが、実際に本文のみを抽出することができません。  
カテゴリーIDは適当です。  
/ResultSet/Result/Descriptionのレスポンスフィールドのみを表示したいのです。  
このコードだと最後の行でエラーが出現します。

**エラー内容**

[code]

    Traceback (most recent call last):
      File "test.py", line 23, in <module>
        print(root['./ResultSet/Result/Description'].text)
    TypeError: element indices must be integers
    
[/code]

**プログラム**

[code]

    import urllib.request
    import urllib.parse
    import xml.etree.ElementTree as ET
    
    params = {
        "category_id": "2501"
    }
    
    p = urllib.parse.urlencode(params)
    
    u = 'https://shopping.yahooapis.jp/ShoppingWebService/V1/reviewSearch?'
    a = 'appid=XXXXXXXXXXXX(自分のID)&'
    
    url = u + a + p
    
    req = urllib.request.Request(url)
    
    with urllib.request.urlopen(req) as response:
        xml_string = response.read()
    
    root = ET.fromstring(xml_string)
    
    print(root['./ResultSet/Result/Description'].text)
    
[/code]

追記・変更  
ElementTreeではなくBeautifulSoupをつかうと本文のみ抽出できるようになりましたが、文章の間にというタグがくっついたまま出力されてしまいます。

変更後コード

[code]

    import urllib.request
    import urllib.parse
    from bs4 import BeautifulSoup
    
    params = {
        "category_id": "2501"
    }
    
    p = urllib.parse.urlencode(params)
    
    u = 'https://shopping.yahooapis.jp/ShoppingWebService/V1/reviewSearch?'
    a = 'appid=XXXXXXXXXXX&'
    
    url = u + a + p
    
    req = urllib.request.Request(url)
    
    with urllib.request.urlopen(req) as response:
        xml_string = response.read()
    
    soup = BeautifulSoup(xml_string, "xml")
    print(soup.find_all("Description"))
    
[/code]

出力

>
> [![画像の説明をここに入力](https://i.stack.imgur.com/qUtLl.png)](https://i.stack.imgur.com/qUtLl.png)


CC BY-SA 4.0
2019-06-08T08:36:58.587
55631
2019-06-08T17:20:59.337
2020-06-17T08:14:45.997
-1
question
python python3 api xml
WebAPIのレスポンスから任意の要素を取得したい


beautifulsoup4のfind_allの次に、各要素のtextアトリビュートを使って文字列を取得すると良いと思います。

[code]

    descriptions = []
    for d in soup.find_all("Description"):
        descriptions.append(d.text)
    
    print(descriptions)
    
[/code]


CC BY-SA 4.0
2019-06-08T09:39:27.600
55634
2019-06-08T09:39:27.600
26558
55631
answer