2

Python でフラスコ アプリを実行しています。その一部は、サードパーティ API から取得した XML データを使用しています。minidom を使用して、Python スクリプト内の XML を解析します。

関連する python コード:

from xml.dom import minidom
import requests

usa_xml = requests.get(URL_HERE)
usa_parsed = minidom.parseString(usa_xml.content)

スクリプトは、XML から値を見つけて表示します。ローカル マシンで python スクリプトを実行すると、すべて正常に動作します。リポジトリをpythonanywhereに置くと、解析は同じ XML データで失敗します。

エラーのトレースバック:

Traceback (most recent call last):
  File "/usr/local/lib/python3.4/dist-packages/flask/app.py", line 1817, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib/python3.4/dist-packages/flask/app.py", line 1477, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/local/lib/python3.4/dist-packages/flask/app.py", line 1381, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/local/lib/python3.4/dist-packages/flask/_compat.py", line 33, in reraise
    raise value
  File "/usr/local/lib/python3.4/dist-packages/flask/app.py", line 1475, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/local/lib/python3.4/dist-packages/flask/app.py", line 1461, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/home/jshorty/OwlWire/owlwire.py", line 65, in select
    usa_parsed = minidom.parseString(usa_xml.content)
  File "/usr/lib/python3.4/xml/dom/minidom.py", line 1970, in parseString
    return expatbuilder.parseString(string)
  File "/usr/lib/python3.4/xml/dom/expatbuilder.py", line 925, in parseString
    return builder.parseString(string)
  File "/usr/lib/python3.4/xml/dom/expatbuilder.py", line 223, in parseString
    parser.Parse(string, True)
xml.parsers.expat.ExpatError: no element found: line 29, column 7    

それ以外の場合は機能するのと同じ XML で失敗しているため、これは XML 自体の問題ではないようです。問題を探し始める場所に困惑しています-pythonanywhereに事前にインストールされているすべてのデフォルトモジュールを使用していますが、これはminidomの異なるバージョンの問題でしょうか?

エラーは常に 29 行目の 7 列目にあるため、アクセスしている XML のインスタンスへのリンクを次に示します: http://ebird.org/ws1.1/data/obs/region_spp/recent?rtype=country&r =US&sci=surnia%20ulula&back=30&maxResults=1&includeProvisional=true

4

1 に答える 1