Ошибка синтаксического анализа XML с помощью Python Script с pythonanywhere (но не на локальной машине)

Я запускаю фляжное приложение с python, часть которого использует XML-данные, полученные из стороннего API. Я использую minidom для анализа XML в скрипте Python.

Соответствующий код 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. Я не знаю, с чего начать поиск проблемы - я использую все модули по умолчанию, предварительно установленные на python, где угодно, может ли это быть проблемой разных версий 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


person Jake Shorty    schedule 04.07.2014    source источник
comment
звучит так, как будто это может быть. какие версии вы используете на каждом?   -  person hwjp    schedule 05.07.2014
comment
это версии на моей локальной машине: C:\Users\Jake>pip freeze Flask==0.10.1 Flask-SQLAlchemy==1.0 Jinja2==2.7.2 MarkupSafe==0.23 SQLAlchemy==0.9.4 Werkzeug==0.9.4 itsdangerous==0.24 requests==2.3.0 virtualenv==1.11.6   -  person Jake Shorty    schedule 07.07.2014
comment
Хм, минидом встроен в Python. Я вижу, что вы используете Python 3.4 на PythonAnywhere из трассировки стека. Вы также используете 3.4 на своей локальной машине?   -  person Giles Thomas    schedule 07.07.2014
comment
Ага. Я также определил, что ошибка, возникающая при синтаксическом анализе, всегда находится в одном и том же месте (строка 29, столбец 7); Я отредактирую сообщение со ссылкой на образец XML, к которому я обращаюсь.   -  person Jake Shorty    schedule 07.07.2014
comment
возможный дубликат открыть URL-адрес из pythonanywhere   -  person horns    schedule 25.09.2015


Ответы (1)


Я предполагаю, что вы используете бесплатную учетную запись. Бесплатные учетные записи на PythonAnywhere имеют ограниченный доступ в Интернет, вы можете получить доступ только к сайтам, которые находятся в белом списке:

https://www.pythonanywhere.com/wiki/403ForbiddenError

https://www.pythonanywhere.com/whitelist/

Вы увидите, что если вы настроите свой код, чтобы он выполнял:

usa_xml = requests.get(URL_HERE)
print(usa_xml)

Вы, вероятно, увидите

<Response [403]> 

403 запрещено.

Мы (команда PythonAnywhere) обычно рады добавить сайты с общедоступным API в белый список. ebird.com выглядит нормально, я посмотрю, смогу ли я это добавить. Для всех, у кого есть подобный запрос, не стесняйтесь обращаться к нам, если увидите ошибку 403!

person hwjp    schedule 08.07.2014
comment
ebird.org теперь в белом списке. попробуйте еще раз! - person hwjp; 08.07.2014
comment
Да, я действительно использую бесплатную учетную запись, и это решило проблему. Я понимаю, что это означает, что ошибка, связанная с синтаксическим анализом, связана с тем, что не было полученного XML для анализа, хотя я действительно не понимаю, почему он указал что-то другое, кроме первой строки/столбца. Спасибо! - person Jake Shorty; 10.07.2014