繁体   English   中英

使用pythonanywhere(但不在本地计算机上)的Python脚本进行XML解析错误

[英]XML parsing error with Python Script with pythonanywhere (but not on local machine)

我正在使用python运行flask应用程序,其中一部分使用从第三方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&背面= 30&的maxResults = 1&includeProvisional =真

我的猜测是您使用的是免费帐户。 PythonAnywhere上的免费帐户限制了Internet访问,您只能访问白名单上的网站:

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,请随时与我们联系!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM