【发布时间】:2017-06-06 15:20:36
【问题描述】:
我正在尝试运行这个程序。直到今天它工作正常。我的代码没有任何改变。
import lxml.etree
import urlparse
import re
def parse_url(url):
return lxml.etree.parse(url, lxml.etree.HTMLParser())
urlivv = "http://finance.yahoo.com/q?s=IVV"
docivv = parse_url(urlivv)
这是我的错误信息:
IOError: Error reading file 'http://finance.yahoo.com/q?s=IVV': failed to load external entity "http://finance.yahoo.com/q?s=IVV"
网站上有一些关于将StringIO 添加到参数的文档(见下文)。但我觉得奇怪的是我以前从来没有这样做过。
tree = etree.parse(StringIO(myString))
编辑:更完整的堆栈跟踪。
>>> import lxml.etree
>>> tree = lxml.etree.parse('http://finance.yahoo.com/q?s=IVV', parser=lxml.etree.HTMLParser())
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
File "src\lxml\lxml.etree.pyx", line 3427, in lxml.etree.parse (src\lxml\lxml.etree.c:81100)
File "src\lxml\parser.pxi", line 1811, in lxml.etree._parseDocument (src\lxml\lxml.etree.c:117831)
File "src\lxml\parser.pxi", line 1837, in lxml.etree._parseDocumentFromURL (src\lxml\lxml.etree.c:118178)
File "src\lxml\parser.pxi", line 1741, in lxml.etree._parseDocFromFile (src\lxml\lxml.etree.c:117090)
File "src\lxml\parser.pxi", line 1138, in lxml.etree._BaseParser._parseDocFromFile (src\lxml\lxml.etree.c:111636)
File "src\lxml\parser.pxi", line 595, in lxml.etree._ParserContext._handleParseResultDoc (src\lxml\lxml.etree.c:105092)
File "src\lxml\parser.pxi", line 706, in lxml.etree._handleParseResult (src\lxml\lxml.etree.c:106800)
File "src\lxml\parser.pxi", line 633, in lxml.etree._raiseParseError (src\lxml\lxml.etree.c:105611)
OSError: Error reading file 'http://finance.yahoo.com/q?s=IVV': failed to load external entity "http://finance.yahoo.com/q?s=IVV"
【问题讨论】:
-
您说“直到今天它都运行良好。我的代码没有任何改变”但是您正在从您无法控制的 Web 服务器下载文件。服务器端似乎很可能发生了一些变化,现在您需要更新代码以应对变化。
-
@bdesham 感谢您的回复。我对此还比较陌生,所以请多多包涵。这个问题似乎出现在几个不同的网站上,这些网站可能由不同的网络服务器控制(或者我在这里不知道)。由于它在几个 URL 上因相同的原因而失败,我认为这是一个代码问题。无论如何,我不确定如何更新我的代码以处理更改,所以欢迎任何反馈。
-
添加
StringIO是否改变了结果?如果您尝试在运行 Python 代码的同一台计算机上的网络浏览器中加载该 Yahoo URL,您能看到该网页吗? -
@bdesham StringIO 不工作。它说“模块对象不可调用”。但我可能用错了。我尝试将它放在函数调用和函数参数本身中,并且都产生了相同的错误。是的,我可以在浏览器中看到该网页。谢谢
-
会不会是解析器的问题? (我添加了堆栈跟踪。)
标签: python parsing lxml xml.etree