我正在尝试运行此程序。直到今天,它一切正常。代码中的任何内容都没有改变。lxml etree解析失败(IOError)
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
@bdesham感谢您的回复。我还是比较新的,所以请耐心等待。这个问题似乎出现在几个不同的网站上,这些网站大概是由不同的网络服务器控制的(或者我在这里是无知的)。由于在几个网址上出现同样的原因,我认为这是一个代码问题。无论我不确定如何更新代码来处理更改,欢迎提供任何反馈意见。 – GC123
添加'StringIO'是否改变结果?如果您尝试在运行Python代码的同一台计算机上的Web浏览器中加载该雅虎URL,您是否能够看到该网页? – bdesham